iOS性能问题优化总结

直接上干货。

个人感觉,性能问题有40%以上是代码逻辑的问题,剩下50%instrument 可以帮你定位,剩下的10%就是经验和能力的沉淀了。

注意事项:

(1)性能问题,一定要用真机来调试;

(2)debug时,切记edit scheme选择profile将里面的build config由release改为debug;


iOS性能问题优化总结_第1张图片

(3)build setting里面将debug information format里面的debug下的选项改为:

“with dsYM File” 

iOS性能问题优化总结_第2张图片

一、启动阶段耗时:

神器:TIME PROFILE 

1.cmd+i,运行,走起,处理黑名单方法。

iOS性能问题优化总结_第3张图片

2.代码逻辑方面:

(1)是否启动有不合理的耗时操作(发请求,io读写操作),是否一定要放在启动阶段。

(2)启动时的发包如果过多,考虑将过多的、没有必要的发包hold住,留在进入启动后的界面后再发包。

二、图片加载耗时:

1.比较基础的用法:

uiimage imageNamed:自带缓存功能,用于大量加载的图片调用

uiimage imagewithcontenfile:适用于大图,加载一次的调用

2.一些比较耗时的图片,比较tableView上的头像,可以考虑加载到calayer层,calayer层有GPU加速,对性能提升有比较大的改善,缺点是可能会导致view层上动画失效,所以方案上,可以把一些耗时的图片,放在layer的层。

3.clearColor问题

再介绍一下instruments神器:

iOS性能问题优化总结_第4张图片

大量图片没原因的被设置为clearColor,以及opqque = NO,

会导致图片渲染耗时。(看了下原理,我的理解是,本来两个图层各渲染一次就好,然是设置为透明之后,各渲染一次之后,还是渲染一次叠加的效果)。

而且,苹果官方文档也对opaque这一属性的描述中提到:

当置为YES时,会提升性能。

4.另外就是考虑,图片的缓存方式(bitmap位图缓存,但是比较占内存空间),

内存映射mmap等方式,具体可以参考下path新开源的图片优化库FastImageCache,是Path团队开发的一个开源库,用于提升图片的加载和渲染速度。

iOS性能问题优化总结_第5张图片

三、读写、网络请求

耗时操作尽量放在子线程(最好有独立的数据库线程和网络请求线程)中去操作。


四、内存泄漏问题

1.静态分析

iOS性能问题优化总结_第6张图片
iOS性能问题优化总结_第7张图片

2.instrument 又闪亮登场:

iOS性能问题优化总结_第8张图片

如果刚才是静态分析,那么现在就动态分析了。

过多的内存泄漏问题(注意instrument的红线了)以及不必要的单例问题也会造成性能的恶化。


五、多说一句UseDefault

NSUserDefault 以比较便捷的存储方式著称为大多数开发人员所喜爱,但是,你可知道,不加以节制的大量的使用NSUserDefault(尤其在中大型项目中),会使得性能恶化。

原理上,NSUserDefault每新存入一个新的对象,会将内部所有的对象全部重新保存一遍,所以也就是NSUserDefault不能用于海量存储的根本原因。

文件的io耗时,instrument中的

iOS性能问题优化总结_第9张图片

也有一定的功效,定位到耗时的io操作,以及耗时时间。

6、

for(size_t y =0; y < height; ++y) {

       for(size_t x =0; x < width; ++x) {

       //Dosomething with xandy here

      }

}

小小的改动或许就可以让它运行的更快:

dispatch_apply(height, dispatch_get_global_queue(0,0), ^(size_t y) {   

          for(size_t x =0; x < width; x +=2) {

                  //Dosomething with xandy here    

           }

});

你可能感兴趣的:(iOS性能问题优化总结)