在iOS中如何优化内存(一)

1.用ARC管理内存

ARC(Automatic ReferenceCounting,自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常由于我们忘记释放所造成的内存泄露。它自动帮你管理retain和release的过程,除了帮你避免内存泄露,ARC还帮你提高性能,它能保证释放掉不在需要的内存。

2.在正确的地方使用reuseIdentifier

一个开发中常见的错误就是没有给UITableViewCells,UICollectionViewCells,甚至是UITableViewHeaderFooterViews设置正确的reuseIdentifier

3.当View设置为透明的时候,一般把apaque设为NO,减小开销,对内存有好处

4.避免庞大的XIB

当你加载一个XIB的时候所有内容都被放在了内存里,包括任何图片。如果有一个不会即刻用到View,你这就是在浪费内存资源

5.不要阻塞主线程

永远不要使主线程承担过多。因为UIKit在主线程上做所有的工作,渲染,管理触摸反应,回应输入等都需要他在上面完成。一直使用主线程的风险就是如果你的代码真的block了主线程,你的app会失去反应。      大部分阻塞主线程的情形是你的app 在做一些牵涉到读写外部资源的I/O操作,比如存储或者网络。

6.在ImageViews中调整图片大小

如果在UIImageVIew中显示一个来自bundle的图片,你应保证图片的大小和UIImageVIew的大小相同。因为在运行中缩放图片是很耗资源的,特别是UIImageVIew嵌套在UIScrollVIew中的情况下。 如果图片是在远端服务器加载的你不能控制图片的大小,你可以在下载完成后,最好用background thread,缩放一次,然后在UIImageView中使用缩放后的图片。

7.选择正确的collection

学会选择对业务场合最适合的类或者对象是写出高效代码的基础,一些常见的collections的总结:(1)Arrays:有序的一组值。使用index来lookup很快,使用value lookup很慢,插入/删除很慢的。(2)Dictionaries:存储键值对。用键来查找比较快。(3)Sets

8.打开gzip压缩

大量的app依赖于远端资源和第三方API,你可能会开发一个需要从远端下载XML,JSON,HTML或者其他格式的app。 问题是我们的目标是移动设备,一次就不能盲目的指望网络状态有多好。一个用户现在还在edge网络,下一秒就可能切换为4G网路。不论什么场景,你肯定不想让你的用户等太长时间。减小文档的方式就是在服务端和你的app种打开gzip。这对于文字这种能有高压缩率的数据来说会有更显著的效用。  好消息是,iOS已经在NSURLSession 中默认支持了gzip压缩,当然AFNetWorking这些框架也是支持的。

9.重用和延迟加载

更多的View意味着更多的渲染,也就是更多的CPU和内存消耗,对于那种嵌套了很多VIew在UIScrollVIew里边的app更是如此。 这里我们就模仿UITableView不要一次性创建所有的subView,而是当需要的时候再创建,当完成使命后,就把它放在一个重用队列中。这样的话你就只需要在滚动发生时创建你的VIews,避免了不必要的内存分配。如果一个用户点击按钮的时候需要呈现一个VIew,有两种实现方法:第一种:创建并隐藏这个View当这个screen加载的时候,需要的时候显示它。第二种:当需要时创建。 每个方案都有其优缺点。第一种方案因为你一开始就创建一个VIew并保持它知道不再使用,这就会更加消耗内存。然而也会是你的app更加流畅。第二种方案则相反 消耗内存小,但是用户点击按钮的时候比第一种稍显卡顿。

10.Cache 缓存

一个极好的原则就是缓存你需要的,也就是那些大不可能改变但经常使用的东西。 我们缓存什么呢?远端服务器的响应,图片,甚至计算结果,比如UItableView的行高。

下一篇 还有几种方案 尽请期待

                                  

你可能感兴趣的:(在iOS中如何优化内存(一))