尽可能用轻量级的对象,好比用不到事件处理的地方,能够考虑使用CALayer取代UIView;git
不要频繁地调用UIView的相关属性,好比frame、bounds、transform等属性,尽可能减小没必要要的修改;github
尽可能提早计算好布局,在有须要时一次性调整对应的属性,不要屡次修改属性;缓存
Autolayout会比直接设置frame消耗更多的CPU资源;性能优化
图片的size最好恰好跟UIImageView的size保持一致;bash
控制一下线程的最大并发数量;并发
尽可能把耗时的操做放到子线程:oop
// 文字计算
[@"text" boundingRectWithSize:CGSizeMake(100, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:nil context:nil];
// 文字绘制
[@"text" drawWithRect:CGRectMake(0, 0, 100, 100) options:NSStringDrawingUsesLineFragmentOrigin attributes:nil context:nil];
复制代码
尽可能避免短期内大量图片的显示,尽量将多张图片合成一张进行显示;布局
GPU能处理的最大纹理尺寸是4096x4096,一旦超过这个尺寸,就会占用CPU资源进行处理,因此纹理尽可能不要超过这个尺寸;post
尽可能减小视图数量和层次;性能
减小透明的视图(alpha<1),不透明的就设置opaque为YES;
平时所说的“卡顿”主要是由于在主线程执行了比较耗时的操做;
能够添加Observer到主线程RunLoop中,经过监听RunLoop状态切换的耗时,以达到监控卡顿的目的。
第三方:LXDAppMonitor