iOS性能优化工具: Instruments

Core Animation:离屏渲染,图层混合等GPU耗时。
Leaks:内存检测,内存泄漏检测工具。
Energy Log:耗电检测工具。
Network:流量检测工具。
Time profile


Separate by State : 线程分离,状态分开显示 ,例如:Running状态,
Separate by Thread : 线程分离, 每个线程分开显示,只有这样 才能在调用路径中能够清晰看到占用CPU耗时最大的线程.
Invert Call Tree : 从上到下跟踪堆栈信息.这个选项可以快捷的看到方法调用路径最深方法占用CPU耗时,比如FunA{FunB{FunC}},勾选后堆栈以C->B->A把调用层级最深的C显示最外面.
Hide System Libraries : 隐藏系统调用,只关注自己代码的耗时
Flatten Recursion : 递归函数, 每个堆栈跟踪一个条目
Top Functions : 显示某个函数的总时间,A函数内调用多个函数时,可以显示A函数的总耗时
Energy Log
第一步 : 打开手机设置,点击"开发者"

第二步 : 点击Logging

第三步 : 勾选Energy,并点击startRecording

第四步 : 运行需要测试的App(确保手机消耗的是手机自身的电池),运行3 - 5分钟,再进入手机设置点击stopRecording

第五步 : 使用xcode,把手机和xcode相连,并打开Instruments中的Energy Log,点击工具栏中import Logged Data from Device


一.代码层面
1.合理使用NSDateFormatter 和 NSCalendar这种高开销对象
性能测试表明,NSDateFormatter的性能瓶颈是由于NSDate格式到NSString格式的转化,所以把NSDateFormatter创建单例意义不大.推荐的做法是,把最常用到的日期格式做缓存.
2.不要频繁的刷新页面,能刷新1行cell最好只刷新一行,尽量不要使用reloadData.
3.选择正确的集合
NSArray,使用index来查找很快(插入和删除很慢)
字典,使用键来查找很快
NSSets,是无序的,用键查找很快,插入/删除很快
4.少用运算获得圆角,不论view.maskToBounds还是layer.clipToBounds都会有很大的资源开销,必须要用圆角的话,不如把图片本身就做成圆角
5.懒加载,不要一次性创建所有的subview,而是需要时才创建.
6.重用
可以模仿UITableView和UICollectionView,不要一次性创建所有的subview,而是需要时才创建.完成了使命,把他放入到一个可重用集合中
7.图片处理
图片与imageView相同大小,避免多余运算
可以使用整副的图片,增加应用体积,但是节省CPU
可调大小的图片,可以省去一些不必要的空间
CALayer,CoreGraphics,甚至OpenGL来绘制,消耗CPU
8.cache,cache,cache(缓存所有需要的)
服务器相应结果的缓存(图片)
复杂计算结果的缓存(UITableView的行高)
9.尽量少用透明或半透明,会产生额外的运算.
10.使用ARC减少内存失误,dealloc需要重写并对属性置为nil
11.避免庞大的xib,storyBoard,尽量使用纯代码开发
CPU层面
1.Timer的时间间隔不宜太短,满足需求即可
2.线程适量,不宜过多,不要阻塞主线程
3.优化算法,减少循环次数
4.定位和蓝牙按需取用,定位之后要关闭或降低定位频率
Core Animation
在性能优化中一个最具参考价值的属性是FPS,就是屏幕刷新率,苹果的iphone推荐的刷新率是60Hz,也就是说GPU每秒钟刷新屏幕60次,这每刷新一次就是一帧frame,FPS也就是每秒钟刷新多少帧画面。静止不变的页面FPS值是0,这个值是没有参考意义的,只有当页面在执行动画或者滑动的时候,FPS值才具有参考价值,FPS值的大小体现了页面的流畅程度高低,当低于45的时候卡顿会比较明显。

Leaks
用来检测内存泄露的位置。
1、设置Instruments,能更快的找到泄露源
搜索 Debug Information Format,全部设置为DWARF with dsYM File,dSYM 是保存 16 进制函数地址映射信息的中转文件

2、设置显示参数


网友评论