在oc中提起性能优化,莫过于UITabliew.
在表格优化中性能优化有以下几点需要注意.
1.不能在cell的代理方法中动态创建子视图
2.cell中的图片要异步加载.
3.关于图片设置圆角,其实一直以来都有很大的争论.说到设置圆角究竟会不会导致性能优化呢?可是所谓的性能好右是什么呢?
那么就拿真机测试一番,因为真机CPU架构和模拟器的架构完全一样
在两帧之间,运算没有做完,就会造成卡顿,这个就是跳帧
刷新帧率(50-60)为优良
那么问题来了什么是一帧呢?
手机屏幕要想看到优良的画面从左到右,从上到下 都一个一个点画 这个就是完整的一帧图片
由于人体眼睛的特殊构造,视觉16帧会让人觉得是在动,24帧才会有优良的视觉体验.
为什么有些app会卡顿?会花?
因为摄像机的帧率是24帧.而电脑手机拥有良好的用户体验起码要50帧+
以及为什么有时候看电影车轮会倒着转?
因为倒时差,在车轮 的转速在某一个转速的时候跟摄像机的帧率吻合,给大闹皮层一种刺激)就会造成一种视觉差假象,看起来就像是倒着转.
说到这点,就不能不说栅格化
是一种美工(设计)的数语将cell中的所有内容,生成一张独立的图形
在屏幕滚动的时候,只显示图像
使用栅格化
Self.layer.shouldRasterize = yes
//栅格化必须要制定分辨率
Self.layer.resterizationScale =
[UIScreen mainScreen].scale
// 2.异步绘制 如果cell比较复杂,可以使用
Self.layer.drawAsynchronously = YES
如果要提高表格的性能,最关键的就是要减少计算量,就能保证每一帧都完成计算,从而达到流畅的效果,说白了也就是减少计算量
跳帧
就是在两帧之间运算还没有做完,就滚动到下一张图片去了,从而造成失帧
就会造成卡顿的感觉,用户的体验非常不好
好了,概念阐述清楚了,回到问题本身,如何优化?
1.行高一定要缓存.
2.不要动态创建子视图
所有的子视图都要预先创建好,不需要可以设置为hidden,或者高度为零
如果要说hidden和高度为零,那个性能更高,这个经过我测试在10000次测验几乎性能差距微微
3.所有的子视图都应该要加到contenView上
4.所有的子视图view都必须要指定背景颜色
为什么要指定背景颜色呢?因为没有指定颜色,让系统渲染的话,会大量消耗cpu的性能
5.所有的颜色都不要使用alpha (透明度)
什么不要使用透明度呢?还是因为图层渲染的问题.想象一下如果设置alpha透明度,系统就会为所有的图层一起渲染来渲染成透明度,这个需要cpu大量的计算,是非常耗性能的
6.cell栅格化
Layer.shouldRasterize = true
Layer.rasterizationScale = UIScrren.mainreen().scale
7.异步绘制
Layer.drawsAsynchronously = true
8.尽量不要给图片设置圆角.如果非要绘制,那么久异步绘制.
其实最好是叫美工给一张原型图片
参考内容为:唐巧iOS高阶开发笔记
以上纯手码,如果你有更好的办法,请告诉我.如果那里有错,请告诉我!马上改.