UITableview的优化方法(缓存高度,异步绘制,减少层级,hide,避免离屏渲染)
1 缓存高度
提前计算好 cell 的高度和布局
iOS8后,会边滑动边调用heightForRowAtIndexPath:这个方法; 如果把计算cell高度的方法写在这儿, 不仅每次都会调用计算方法, 而且重复滑动的话, 还会再次计算; 所以我们一般在网络请求结束后,更新界面之前就把每个 cell 的高度算好,缓存到相对应的 model 中。2 异步绘制
在Cell上添加系统控件的时候,实质上系统都需要调用底层的接口进行绘制,当我们大量添加控件时,对资源的开销也会很大,所以我们可以索性直接绘制,提高效率3 减少层级
减少SubViews的数量, 在滑动的列表上,多层次的view会导致帧数的下降。
例如: 绘制 cell 不建议使用 UIView,建议使用 CALayer。
从形式来说:UIView 的绘制是建立在 CoreGraphic 上的,使用的是 CPU。CALayer 使用的是 Core Animation,CPU,GPU 通吃,由系统决定使用哪个。View的绘制使用的是自下向上的一层一层的绘制,然后渲染。Layer处理的是 Texure,利用 GPU 的 Texture Cache 和独立的浮点数计算单元加速 纹理 的处理。4.hide显示
尽量少用addView给Cell动态添加View,可以初始化时就添加,然后通过hide来控制是否显示5.避免离屏渲染:少用圆角,可用贝塞尔曲线画
6.正确地使用UITableViewCell的重用机制:多种类型的cell,能不复用就不复用。
7.避免阻塞主线程:子线程计算复杂的数学问题
- 按需加载:用懒加载
9.尽可能重用开销比较大的对象 比如:NSDateFormatter
10 尽量减少计算的复杂度
11.用轻量级的对象
UIView是 CALayer 的代理,layer本身并不能响应事件,因为layer是直接继承自NSObject,不具备处理事件的能力。而 UIView 是继承了UIResponder 的,
当只是展示时用 layer 代替UIView
技巧
可以通过模拟器中debug模式查看图层
- Color Blended Layers 绿⾊色越多,代表混合的情况越少,红⾊色越多App UI急需改进.
- Slow Animations 该功能可以降低app中动画的运⾏行行速度,适合调试包含复杂动画的应⽤用程序
- Color Copied Images:该选项可以给绘制时被Core Animation复制的图⽚片添加蓝绿⾊色叠加层。
- Color Misaligned Images:如果图⽚片边界没有与⽬目标像素完美对⻬齐,该功能可为图⽚片叠加上⼀一层品红⾊色。如果图⽚片使⽤用确定的⽐比例例⼤大⼩小绘制,那么该功能会 为图⽚片添加⼀一层⻩黄⾊色叠加。
- Color Off Screen Rendered:.该选项为离屏渲染内容添加⼀一个⻩黄⾊色的叠加层。
--初稿
持续更新中......