iOS App性能提升秘笈

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

    1. 内存

    1.1 使用ARC管理内存

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

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

    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
    • 结构化文件: XML, JSON, or Plist format
    • 归档: Archive using NSCoding
    • 数据库: SQLite
    • Core Data.

    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框架

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

    相关文章

      网友评论

        本文标题:iOS App性能提升秘笈

        本文链接:https://www.haomeiwen.com/subject/lpthxttx.html