ios性能

作者: 我是小胡胡分胡 | 来源:发表于2018-05-26 08:08 被阅读5次

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

相关文章

网友评论

      本文标题:ios性能

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