1,网络使用流量
2, 耗电量
rrc 无线资源资源控制 状态切换;
假如一个手机有5Wh(18000 J)总电量,手机完成一次从空闲模式切换到高耗能模式,再到低耗能模式,再到空闲模式的循环大概需要10J能量。如果每分钟切换一次,那么一个小时需要消耗60*10J = 600J电量,也就相当于总电量的3%。如果一个APP在后台每分钟发送一个请求,那么手机处于待机状态下一天就耗掉了3%* 24 = 72%的电。这就是为什么智能手机即使在待机状态下耗电量也非常大的原因。
1,合并请求
2,预取数据
3,避免轮训
4,重连机制优化。 心跳时间间隔,重连超市时间,重连次数
5,数据缓存
3,APP启动时间
1 、 main之前
parse image, map image, rebase image, bind image
这段时间可以Edit scheme -> Run -> Arguments 中将环境变量 DYLD_PRINT_STATISTICS 设为 1 或者更详细的DYLD_PRINT_STATISTICS_DETAILS 设为 1
就可以输出出来。
2、 run image initilizers
class load
category load
_attribute((constructor))和C++ generates initializer for static allocated objects
可执行程序+动态库
可执行程序(已经打包了静态库了的)
hook load函数, 勾住所有动态库和主程序的load方法
C++ Static Initializers 也可以hook ,同样只能hook自己库的。第三方库的库的函数地址hook后产生异常。
使用Instruments -》Static Initializer Tracing 的工具,可以方便排查每个 Static Initializer 的时间消耗
3、
call main()
call uiapplicationmain()
call will finishlaunch
4,异常捕获 堆栈符号定位问题
5,内存泄漏
1, 静态分析
product-》 analyze
2, 动态分析
微信读书团队开源的第三方库。
MLeaksFinder 通过页面不用后,延时对weakself发送消息,如果能发送成功,说明对象没有被释放。
可以获取到泄漏对象。
FBRetainCycleDetector 能够输出泄漏对象的 循环引用关系
3, dealloc 手动打点
6,卡顿。离屏渲染。异步渲染。
1, YYAsyncLayer
重写display方法, 拆分成3部分:
1) display block 中异步绘制
2) 且回到主线程 , 从画布中获取图片。 赋值到 self.contents。
3)didDidDisplay block
2, YYTransaction
延迟提交block。
不立即执行, 而是在当前的runloop变成kCFRunLoopBeforeWaiting状态时,再唤醒一次runloop,再执行相关block方法。
runloop 状态切换
kCFRunLoopEntry = (1UL << 0), // 即将进入Loop
kCFRunLoopBeforeTimers = (1UL << 1), // 即将处理 Timer
kCFRunLoopBeforeSources = (1UL << 2), // 即将处理 Source
kCFRunLoopBeforeWaiting = (1UL << 5), // 即将进入休眠
kCFRunLoopAfterWaiting = (1UL << 6), // 刚从休眠中唤醒
kCFRunLoopExit = (1UL << 7), // 即将退出Loop