471, UITableview的优化方法(缓存高度,异步绘制,
作者:
枫叶1234 | 来源:发表于
2021-02-06 09:57 被阅读0次
- 缓存高度,提前计算好 cell 的高度和布局:iOS8后,会边滑动边调用heightForRowAtIndexPath:这个方法; 如果把计算cell高度的方法写在这儿, 不仅每次都会调用计算方法, 而且重复滑动的话, 还会再次计算; 所以我们一般在网络请求结束后,更新界面之前就把每个 cell 的高度算好,缓存到相对应的 model 中。
- 异步绘制,在Cell上添加系统控件的时候,实质上系统都需要调用底层的接口进行绘制,当我们大量添加控件时,对资源的开销也会很大,所以我们可以索性直接绘制,提高效率
- 减少层级,减少SubViews的数量, 在滑动的列表上,多层次的view会导致帧数的下降。例如: 绘制 cell 不建议使用 UIView,建议使用 CALayer。从形式来说:UIView 的绘制是建立在 CoreGraphic 上的,使用的是 CPU。CALayer 使用的是 Core Animation,CPU,GPU 通吃,由系统决定使用哪个。View的绘制使用的是自下向上的一层一层的绘制,然后渲染。Layer处理的是 Texure,利用 GPU 的 Texture Cache 和独立的浮点数计算单元加速 纹理 的处理。
- hide显示,尽量少用addView给Cell动态添加View,可以初始化时就添加,然后通过hide来控制是否显示
- 避免离屏渲染:少用圆角,可用贝塞尔曲线画
- 正确地使用UITableViewCell的重用机制:多种类型的cell,能不复用就不复用。
- 避免阻塞主线程:子线程计算复杂的数学问题
- 按需加载:用懒加载
- 尽可能重用开销比较大的对象 比如:NSDateFormatter
- 尽量减少计算的复杂度
- 用轻量级的对象,UIView是 CALayer 的代理,layer本身并不能响应事件,因为layer是直接继承自NSObject,不具备处理事件的能力。而 UIView 是继承了UIResponder 的,当只是展示时用 layer 代替UIView
本文标题:471, UITableview的优化方法(缓存高度,异步绘制,
本文链接:https://www.haomeiwen.com/subject/cbjwtltx.html
网友评论