最具参考价值的属性是 FPS
方案:
尽量将控件的 opaque
属性设置为 YES;
简化 XIB 文件(XIB 文件是在主线程加载的,Storyboards 就没有这样的问题),使用代码来实现复杂的控件;
将耗时的流程放到后台线程执行;
在运行中缩放图片是很耗费资源的,特别是 UIImageView 嵌套在 UIScrollView 中的情况下。应在显示图片前调整好图片的大小以适应 UIImageView 的大小;
压缩网络请求的数据;
重用和延迟加载;
数据缓存和缓存 UITableView 的行高;
使用 UIColor 的 colorWithPatternImage
方法设置背景能更快的渲染,但会增加内存的使用;如果设置全屏的背景图,则使用 UIImageView,如果设置某个小 View 的背景图,则可以使用 colorWithPatternImage
方法;
尽量不使用 cellForRowAtIndex:
方法,如果需要使用,使用后缓存起来;
使用正确的数据结构,避免显示时需要过多的逻辑处理;
使用 rowHeight、sectionHeaderHeight 和 sectionFooterHeight 来设置固定高度,不要请求 delegate;
选择正确的数据持久化方案:XML 和 NSCoding 都需要读取整个文件到内存中;
临时对象过多时,使用 @autoreleasepool
管理内存;
使用时间戳来处理时间;
Analyze 静态分析工具和 Profile 运行时工具,使用 Analyze 和 Memory Leaks 监测内存泄漏;
UIImage 加载图片性能问题:imagedNamed
有缓存功能,imageWithContentsOfFile
则只加载图片,不缓存。
学习 Instruments 有助于理解计算机基础理论知识体系;
UIImageView 的圆角通过直接截取图片实现,其它视图的圆角可以通过 Core Graphics 画出来;
不用事件处理的地方,用 CALayer 取代 UIVew;
控制线程并发数量;
最大纹理尺寸尽量不要超过 4096 * 4096;
避免离屏渲染,调用 CALayer 的 border、corner、shadow、mask等技术都会触发离屏渲染:
小数据积累到一定数量之后再同步;
合并多个请求,将大数据批量传输;
后台定位时,尽量设置 pauseLocationUpdatesAutomatically
为 YES,用户不太可能移动时系统自动暂停位置更新;