iOS开发aa雨下思考我是程序员;您好程先生;叫我序员就好了

iOS App性能提升秘笈

2015-01-18  本文已影响469人  windgo
  • 如果要做一个优秀的iOS app, 工程师的职责, 就是尽可能的优化App的性能.
  • 本文绝大多数内容来自Macelo Fabri的文章, 重新进行了组织.
  • 本文没有提Instruments,但是,它其实是性能优化的前提。他正如易学中的诊断阶段,下面列出的都是治疗的配方。

1. 内存

1.1 使用ARC管理内存

在大多数情况下, 都应该使用ARC, 因为:

  • 使用ARC, 当你的对象不用时, 系统会尽快的帮你进行release. MRC的话未必能保证.

1.2 选用合适的集合

  • NSArray, NSet, NSDictionary, 适用场景不同, 谨慎选择.

1.3 处理操作系统的内存警告

  • 其实这个不能说是性能问题, 而是你的应用在前台会挂掉, 或者被系统从后台清理掉.

1.4 使用 Autorelease Pool

2. UI

2.1 尽量使用 reuseIdentifier

  • 对于UITableView和UICollectionView中的Cell等, 使用reuseIdentifier, 可以避免每次都重新创建Cell.

2.2 尽可能设置Views 为 Opaque(不透明)

  • 如果你的View不是透明的, 那就显式的设置Opaque为YES, 这样系统在绘制的时候, 就可以进行一定的优化. 虽然设置起来很繁琐, 但是尽可能多的设置吧.

2.3 避免很大的XIBs文件

  • 就算你只使用了XIBs文件中的一个view, 系统在加载XIBs文件的时候, 也会整个加载. 所以尽量保证每个XIBs文件中只有一个View. 但是StoryBoard没有这个问题, 如果要将多个View放在一起, 尽量使用StoryBoard.

2.4 保证Images和UIImageView的大小相同(别缩放)

  • 如果这两者尺寸不一致, 显示的时候就会发生缩放. 缩放是耗时操作, 在滚动视图中尤其耗时.

2.5 重用或者懒加载Views

  • 这个没啥好说的... ...

2.6 考虑使用绘图函数

  • 减少了图片的使用, 适当考虑.

2.7 采用合适的手段设置背景图片

  • 对于重复铺满的背景图片, 可以使用UIColoer进行设置.

2.8 使用Shadow Path设置阴影

2.9 优化你的Table Views

3. 多线程

3.1 不要阻塞主线程

  • 主线程在处理UI, 如果进行耗时操作, 发生了阻塞, 就等着卡吧.

3.2 小心在线程里大量的分配内存空间

  • 堆是有锁的, 每一个时刻, 只能有一个线程进行内存分配操作.

4. 网络

4.1 启用GZIP 压缩

  • iOS和Web服务器对GZIP的支持很好, 尤其对于文本类(Json, XML)的压缩率很高, 能压缩到原来的1/5左右, 所以值得采用.

4.2 减少不必要的Web数据传输

  • 如果只需要用户名和头像, 就别把性别, 城市, 兴趣爱好什么一起传过来.

5. 持久化

5.1. 选择正确的数据存储方式

  • NSUserDefaults

6. 其他

6.1缓存

  • 通过内存, 文件系统, 数据库对网络数据等进行缓存, 是提高性能的不二法则. 空间纬度上越近, 访问越快.

6.2 重用创建代价很大的对象

  • 不需解释, 这也是为什么单例模式的存在.

6.3 避免重复处理数据

  • 比如解析Json数据, 比如计算表格高度

6.4 选择合适的数据格式(XML, JSON)

  • 一般来说xml数据大, 但是支持校验, 支持SAX解析, json数据小.

6.5 减少启动时间

  • 这对应用体验很重要

6.6 避免使用Date Formatters

  • 这货性能很差

6.7 启用编译器优化选项

  • 默认的优化器选项是 -Os, 最快最小。 但是如果不是专门进行科学计算的应用,你可以使用-Ofast,如果需要IEEE浮点运算,则可以使用-O3。这两个选项通常只会增加百分之几的应用体积,但是性能会显著提升。

6.8 启用连接器优化

  • 通过LTO进行连接优化。普通的设置,只是在单个.m文件内进行优化,启用该选项后,会在项目的全局范围内进行优化。

6.9 使用Accelerate框架

  • 这个库里提供了很多数学函数库,可以帮助你提升性能。
上一篇下一篇

猜你喜欢

热点阅读