iOS 性能优化

  基础优化:

  1、使用 ARC 管理内存:

  2、在正确的地方使用 reuserIdentifier

  3、尽量把 View 设置成透明

  4、避免过于庞大的 XIB

  5、不要阻塞主线程

  6、在 ImageView 中调整图片的大小。如果要在 UIImageView 中显示一个来自 bundle 的图片,需要保证图片的大小和 UIImageView 的大小相同。在运行中缩放图片是很耗费资源的,特别是 UIImageView 嵌套在 UIScrollView 的情况下。如果图片是远程下载的,可以在下载后使用 background thread 缩放一次,然后在 UIImageView 中使用 缩放的图片。

  7、选择正确的 Collection。

    Array:使用 Index 查询较快,使用 Value 查询比较慢,插入和删除比较慢;

    Dictionary:存储键值对,用键查找比较快。

    Sets:无序的一对,用值查找很快,插入删除很快;

  8、打开 gzip 压缩。APP 可能大量依赖于服务器资源,减少传输资源进行压缩。

  

  中级优化:

  1、重用和延迟加载:

    更多的 View 意味着更多的渲染,更多额 CUP 和内存消耗,对应嵌套在 UIScrollView 中的视图更是如此。

    不要一次创建所有的 VIew,而是当用到时才去创建,当他们完成使命后,放进可重用的队列。

  2、Cache:

    缓存原则:缓存所需要的,就是那些不太可能改变的但是需要经常读取的。

    缓存内容:服务端的响应,图片、 UITableView 的高度,甚至是计算结果。

    NSCache 和 NSDictionary 类似,不同的是系统回收内存的时候它会自动删掉它的内容。

  3、权衡渲染方法:

    性能还是要 bundle 保持合适的大小。

  4、处理内存警告:

    移除对缓存、图片对象或其他可以重建的对象的强引用。

  5、重用大开销对象:

  6、一些对象初始化很慢,如 NSDateFormat、NSCalendar,需要重用他们,可以通过添加属性到类里或创建静态变量来实现。

  7、避免反复处理数据:

    在服务端和客户端使用相同的数据结构很重要。

  8、选择正确的数据交换格式:

    JSON 解析比 XML 更快,更便于传输。

    使用 SAX 解析 XML 文件,就像解析本地文件一样,不需要像 JSON 一样把所有文档都下载后再开始解析,当有很大量数据时,使用 XML 解析能极大地降低内存消耗和增加性能。

  9、正确设定背景图片:

    全屏背景图:在View上添加一个 UIImageView 作为子 View。

    只是小的背景图,可以使用 UIColor 来绘制,它能更快的渲染也不会消耗性能。

  10、减少使用 Web 特性:

    在 Web 中减少 JavaScript 的使用,避免使用过大的框架。能只用原生 JS 更好;

    尽可能的异步加载。

  11、Shadow path:

    Core Animation 不得不先在后台得出你的图形并加好阴影后才去渲染,开销很大,使用 ShadowPath 避免这个问题,不必每次都计算如何渲染,它使用一个预先计算好的路径。

  12、UITableView 优化:

    1> 正确使用 reuseIdentifer 来重写 cell;

    2> 尽量使所有的 View 不透明,包括 Cell 本身;

    3> 避免渐变,图片缩放;

    4> 缓存行高;

    5> 如果 Cell 内实现的内容来自 web,使用异步加载,缓存请求结果;

    6> 使用 ShadowPath 来画阴影;

    7> 减少 subviews 的数量;

    8> 尽量不适用 cellForRowAtIndexPath: 如果需要用到,只用一次缓存结果;

    9> 使用正确的数据结构来存储数据;

    10> 使用 RowHeight、SectionFooterHeight、SectionHeaderHeight 来设置固定的高度,尽量不使用 delegate;

  13、UIImage 加载图片性能问题:

    imageNamed 初始化;默认加载图片后会在内存中缓存图片。这个方法用特定的名字在系统缓存中查找并返回一个图片对象,如果缓存中没有找到相应的图片,则从制定的地方加载图片并缓存对象,并返回这个图片对象。

    imageWithContentsOfFile 初始化 只加载图片不做缓存。加载一张大图且只是用一次时使用。这样 CPU 不需要做缓存而节省时间。

 

  14、 选择正确的数据存储类型:

    NSUserDefault 存储小数据;

    使用 SQLite 或 CoreData

    FMDB。

 

  高级优化:

  1、加速启动时间:

    尽可能的使用异步任务,比如加载服务端或数据库数据;

    避免使用庞大的 XIB;

  2、使用 AutoReleasePool:

    NSAutoReleasePool负责释放 block 中的 autoRelease 对象,一般情况下会自动被 UIKit 调用,但有些情况需要手动创建。如果手动创建很多临时对象,会发现内存一直在减小,直到对象被 Release 的时候。因为 UIKit 用光了 autoreleasepool 时内存才会被释放。

    可以在自己的 AutoReleasepool 中创建临时对象类避免这个问题。

  3、选择是否缓存图片:

    imageNamed

    imageWithContentsOfFile 

  4、避免日期格式转换:

    控制处理的时间格式,尽量选择 Unix 时间戳,可以很方便的从时间戳获得 NSDate。

  5、不要在 ViewWillAppear 中做过多耗时操作。

 

posted @ 2017-08-31 20:48  ZachRobin  阅读(224)  评论(0编辑  收藏  举报