iOS性能问题优化总结

作者: 潘老6 | 来源:发表于2015-04-22 23:02 被阅读1612次

    直接上干货。

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

    注意事项:

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

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

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

    “with dsYM File” 


    一、启动阶段耗时:

    神器:TIME PROFILE 

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

    2.代码逻辑方面:

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

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

    二、图片加载耗时:

    1.比较基础的用法:

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

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

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

    3.clearColor问题

    再介绍一下instruments神器:

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

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

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

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

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

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

    三、读写、网络请求

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

    四、内存泄漏问题

    1.静态分析


    2.instrument 又闪亮登场:

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

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

    五、多说一句UseDefault

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

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

    文件的io耗时,instrument中的

    也有一定的功效,定位到耗时的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性能问题优化总结

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