性能方面,一款app对于耗电量的要求也不能太高,一般而言,耗电量主要集中在以下几点:
1.定位
2.定时器
3.图片
4.网络和cpu
如何优化,就是从以上几个方面入手。
对于iOS开发者来说,iOS中性能问题大多数是阻塞主线程导致用户的交互反馈出现可以感知的延迟。卡顿检测就显得尤为重要,所谓卡顿,就是CPU与GPU,不能协调工作。
检测可以从原理入手,一般手机的fps保证在60f及以上,是不会出现卡顿现象的,也就是刷新界面不要超过60ms。我们可以在主线程runloop在souce0到souce1之间添加obsever。观察一次从休眠到处理完成时间,所需要的时间,可以参考第三方提供的库,LXDAppFlucyMontor。
详细说起来,大概有以下几种原因:
1.UI渲染需要时间较长,无法按时提交结果。
2.一些需要密集计算的处理放在了主线程中执行,导致主线程阻塞,无法渲染UI界面。
3.网络请求由于网络状态的问题响应较慢,UI层由于没有模型返回无法渲染。
一些主线程开销较大的任务包括:
计算尺寸和布局:比如-heightForRowAtIndexPath:,或者在UILbel中调用-sizeThatFits以及指数上升的AutoLayout‘s布局计算。
图像解码:想要在一个 image view 中使用UIImage,首先要进行解码。
绘图:复杂的文本以及手动绘制渐变和阴影。
对象生命周期:创建,操纵和销毁系统对象(即创建一个UIView)
所以AsyncDisplayKit应运而生。它是一个UI框架,最初诞生于 Facebook 的 Paper 应用程序。它是为了解决 Paper 团队面临的核心问题之一:如何尽可能缓解主线程的压力。
ASDisplayNode 简介
ASDisplayNode 是ASDK的核心类,它只是一个类似于 MVC 中的 “View” 一样的UIView或 CALayer。认识一个 node 的最佳方法是参照你已经熟悉的 UIViews 和 CALayers 之间的关系。
node封装扩展了UIview,类似UIView扩展了CALayer一样。node不会暴露所有view的属行,所以你在访问view属性必须实例去设置。
虽然 Node 本身提供了巨大的性能改进的可能,但真正的强大的是它们与四个容器类结合使用时产生的黑魔法。
这些类包括:
ASViewController:一个UIViewController的子类,允许你提供要管理的 Node。
ASCollectionNodeandASTableNode:Node 等效于UICollectionView和UITableView,其子类实际上保留在底层。
ASPagerNode:一个ASCollectionNode的子类,提供极好的滑动性能相比与UIKit的UIPageViewController来说。但真正的黑魔法来自 ASRangeController 这些类用于影响所包含的 Node 的行为。
还有一点:ASDK的ASTableNode没有复用机制。
-----------未完待续!!!