卡顿优化- CPU

  1. 尽量使用轻量级的对象,比如用不到事件处理的地方,可以考虑使用 CALayer取代UIView.

    比如说我们平时使用数字,比如1,2,3,4,5这种数字的数据类型就用基本数据类型比如int这些,尽量不要使用NSNumber,另外,我们知道CALayer是UIView中的一个属性,CALayer专门负责显示东西的,而UIView负责监听点击事件的,也就是说UIView之所以显示东西,因为它里面有CALayer,之所以能处理点击事件,是由于UIView本身就有处理事件的能力,如果有些地方我们用不到事件处理,就可以考虑使用CALayer取代UIView.

  2. 不要频繁地调用UIView的相关属性,比如frame、bounds、transform等属性,尽量减少不必要的修改

    因为每次调整属性都会重新计算布局相关的东西,这样耗性能比较多.
    尽量提前计算好布局,在有需要时一次性调整对应的属性,不要多次修改属性.

  3. Autolayout会比直接设置frame消耗更多的CPU资源

  4. 图片的size最好刚好跟UIImageView的size保持一致

  5. 控制一下线程的最大并发数量
  6. 量把耗时的操作放到子线程

文本处理(尺寸计算、绘制)
这里写图片描述
图片处理(解码、绘制)
这里写图片描述

我们一般很常写这种代码,实际上,我们的[UIImage imageNamed:@”time”]通过imageNamed去加载,加载完毕以后
变为这个图片其实是不能直接显示到屏幕上的,因为加载进来的是经过压缩的二进制数据,如果真的是想渲染到屏幕上,而且还要进行解码,解码成屏幕所需要的那种形式才能显示到屏幕上,那么直接将它赋值给imageView的image这个属性,它当时是没有直接显示出来的,它只有当这个图片的数据真正要显示到屏幕上的时候,它会拿到过的这个压缩过的图片数据进行解码操作而且这个解码默认是在主线程产生的,这样的话,如果图片数据比较多,比较大的话也可能会产生卡顿,所以一般来说我们会提前让图片在子线程中进行解码,一旦我们在子线程中解码,那回到主线程就不用解码,主线程就少了解码的操作,所以主线程就不会产生卡顿,主线程就会直接拿到解码后的图片数据渲染显示就可以了,其实网络上很多第三方的图片处理框架都是有这个异步解码功能的.

比较经典的处理方式
这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012581760/article/details/81329504