
- 资源优化:对资源文件下手,压缩图片/音频,去除不必要的资源
- 编译优化:
-
release版应该选择Fastest,Smalllest,这个选项会开启那些不增加代码大小的全部优化(新版Xcode默认) - 去除符号信息(都是新版
Xcode默认) - 可执行文件优化:
- 查看第三方库编译之后,.o文件大小,如果对大小影响很大可以考虑替换
- 删除无用代码,如果项目历时长,代码遗留多,这样还是比较有效的(可以通过脚本查找没有引用的类和没有被调用的方法)
内存优化
- 延迟加载
Views、一些资源 - 做好缓存工作,如果服务器没有更新资源,客户端没必要再多请求一次,直接加在本地资源就好-
YYCache -
Autorelease Pool降低内存峰值 - 图片缓存
性能优化
view设置为不透明,避免图层混合,消耗GPU资源圆角、阴影、光栅化,重写
DrawRect这些导致离屏渲染的情况,都应该尽量避免层次过多的视图,可以考虑使用
Frame布局,autolayout这时候性能明显低于Frame布局合理的线程,
I/O不要在主线程预处理和延迟加载:对于可视化的内容,尽量提前加载,而对于优先级比较低的任务,可以延迟加载,这样可以提高用户体验
使用正确的 API
了解
imageNamed:与imageWithContentsOfFile:的差异(imageNamed:适用于会重复加载的小图片,因为系统会自动缓存加载的图片,imageWithContentsOfFile:仅加载图片)选择合适的容器:例如数组就是根据
index查找很快,插入删除慢,而对于字典,用键查找很快避免日期格式转换:
NSDateFormatter是很耗时的,比较推荐的方式是使用C来搞或者缓存NSDateFormatter的结果方式TableView优化设置合适的
reuseIdentifier,重用cell对于高度固定直接设置
rowHight,保证不必要的高度计算和调用,对于可变的Cell,预估算行高以前看到过一个第三方框架:使用
runloop,页面处于空闲状态时执行计算,正在滑动列表时显然不应该执行计算任务影响滑动体验,当UI没在滑动时,默认的Mode是NSDefaultRunLoopMode,当用户正在滑动UIScrollView时,RunLoop将切换到UITrackingRunLoopMode接受滑动手势和处理滑动事件(包括减速和弹簧效果),此时,其他Mode(除NSRunLoopCommonModes这个组合Mode)下的事件将全部暂停执行,来保证滑动事件的优先处理cell圆角,避免离屏渲染