一:什么是TableView的优化以及为什么要优化

1)CPU(中央处理器)和GPU(图形处理器):CPU主要从事逻辑计算的一些工作;GPU主要从事图形处理方面的工作。

2)CPU和GPU的共同点:

都有自己的缓存体系,都有自己的数字和逻辑运算单元,都为了完成计算任务而设计。

3)CPU和GPU的不同点:

CPU的核少但是核内空间非常大,能够处理复杂的逻辑。

GPU核多但是每个核的空间相对较小,故而处理复杂逻辑的空间较少。

针对CPU和GPU的上述不同,面对一个程序系统分配给CPU的往往是较为复杂的逻辑运算,分配给GPU的通常是图片等控件的操作。

4)上述不同而导致的结果:

当程序员为CPU编程时,倾向于用复杂的逻辑结构优化算法来减少计算任务的时间Latency。

为GPU编程->利用其能够处理海量数据的优势,来提高总的数据的吞吐量,来掩盖Latency。

5)为什么优化?

学术上:平衡CPU和GPU在工作上的压力,从而正确的使用CPU和GPU的资源,使他们均匀的负载 这样子使得FPS保持在60帧左右,最终使得用户体验更加美好。

非学术上:掌握UITableView能够给面试加分。

二:UITableView的工作原理

1)tablewView代理方法的执行顺序。

UITableView返回多少组----->每组返回多少行cell--->计算每个cell的高度---->指定cell(cell布局)

2)cell的复用。

原理:当滚动列表时(UITableView)部分cell会移除Window 但是移除的cell并没有被立即释放 而是放到了一个叫做复用池的对象池中,处于待定状态,当有新的cell要出现在Window界面上时,首先会从复用池中寻找是否有相同类型的cell,如果有直接拿过用(最直观的表现是新出现的cell有没有开辟新的内存空间),如果没有,创建一个新的类型的cell,所以UITableView可能拥有多种类型的cell,复用池也可能存储着多种类型的cell,系统通过定义reuseIndentifer作为每个cell的唯一标示符来确定即将出现的cell复用何种类型的cell。

三:UITableView的具体优化

1)尽量使用cell的复用。

使用cell的复用,可以减少内存的开销,没有开辟新的空间,也减少了一些计算量。

2)对于不定高的cell 提前将每个cell的高度存入数组,出现一个cell的时候,直接从数组中拿出确切的高度即可,不用临时计算cell的高度。

图文混排、评论 。

对于固定高的cell和不定高的cell同样适用。

3)涉及网络请求加载数据在UITableView滑动结束的时候在进行加载数据(渲染)避免卡顿。

1、UITableView继承自UIScrollView,继承了后者的方法。

//滑动结束的方法

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

//减速结束之后的方法

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

2、if(self.tableView.dragging==NO&&self.tableView.decelerating==NO)在tableView必须实现的二个方法中(加载cell的方法中)将数据的渲染写在上述if语句中。

4)对于tableView的自定义控件 尤其是UIImageView,尽量减少使用圆角,阴影等layer属性,尽量减少使用alpha(透明度)来设置透明度,(在项目开发中,让UI设计师设计原图就是带圆角的图) 阴影,圆角这些layer效果都是在GPU中完成的。

1、当多个视图重叠时,GPU会进行合成渲染,而渲染的最慢的操作就是混合,因此当视图结构太过复杂,就会大量消耗GPU的资源,所以当一个空间本身是不透明,注意设定alpha为1,这样可以避免无用的alpha通道合成,降低GPU的负载。

2、对控件设置cornerRadius后对其进行clip或mask操作时 会导致offscreenrendering这个也是在GPU中进行的 如果在滑动时 圆角对象太多 回到GPU的负载大增幅。

这时我们可以设置layer的shouldRasterize属性为YES,可以将负载转移给CPU 更彻底的是直接使用带圆角的原图。

5)尽量使用懒加载

又称为延迟加载 实际上是重写某个对象的getter方法 原理:程序一开始并不对它进行初始化 而是在用到他的时候 才为他开辟内存供它使用。

好处:

1、不必将创建的对象的代码全部写在ViewDidLoad中,代码可读性强。

2、每个控件的getter方法,分别负责各自的实例化处理,代码彼此之间独立性强 松耦合。

6)减少返回给的cell里面的处理逻辑和处理时间。

驴妈妈为例:各个UI控件整合到一起,实际上只有一个控件。

7)设置每个cell的opaque属性 ----面试亮点

opaque意思是不透明的 浑浊的 有YES和NO二个结果

alpha 透明度

如果控件本身不透明,我们设置opaque为YES。

8)分段加载数据

设置分页加载数据,也就是上拉刷新和下拉加载。

转载于:https://www.cnblogs.com/fengmin/p/5497082.html

TableView的优化相关推荐

  1. 关于tableview的优化

    转自:   http://www.cnblogs.com/lihuanzhou/p/5558247.html小环妮子 现在市场上的iOS应用程序界面中使用最多的UI控件是什么? 答案肯定是UITabl ...

  2. iOS tableView性能优化之异步排版和绘制渲染----YYText框架学习(YYTextAsyncLayer)

    YYWebImage源码分析 YYImage源码 YYModel源码解析 前言 这段时间针对设计架构,解耦以及性能优化相关的知识点看了不少,前两者可以看MVVM和AOP编程思路,最后一个是昨天看的,Y ...

  3. iOS tableview性能优化及分析

    1.最常用的就是cell的重用, 注册重用标识符 每次滑动cell时需要先去缓存池中寻找可循环利用的cell,如果没有则再重新创建cell 2.减少cell中控件的数量 view对象尽量缩减控件的数量 ...

  4. ios 性能优化(一)

    逻辑优化 代码封装优化 代码执行效率优化 界面优化 离屏渲染优化 界面加载优化 逻辑优化 代码封装优化 代码的封装优化主要是细化代码的功能,每个功能单独提取出来做成一个方法,当其他地方需要用到同样功能 ...

  5. UITableView优化

    UITableView优化的那些事儿 作为iOS开发,UITableView可能是平时我们打交道最多的UI控件之一,其重要性不言而喻.关于TableView,我想最核心的就是UITableViewCe ...

  6. iOS-UITableView的优化(纯手打原创)

    TableView的优化 一:什么是TableView的优化以及为什么要优化 1)CPU(中央处理器)和GPU(图形处理器)   CPU主要从事逻辑计算的一些工作 GPU主要从事图形处理方面的工作 2 ...

  7. 【原/转】UITableview性能优化总结

    UITableView作为ios中使用最频繁的控件之一,其性能优化也是常常要面对的,尤其是当数据量偏大并且设备性能不足时.本文旨在总结tableview的几个性能优化tips,并且随着认识的深入,本文 ...

  8. 控制器瘦身及tableView相关

    今天简单介绍下为ViewController瘦身的一些想法,不足之处还请指出. 一.关于MVVM设计模式 网上的介绍很多,简单说下我的理解. 个人理解: MVVM = 控制器 + 视图 + 数据模型 ...

  9. css+动画优化,css3动画性能优化--针对移动端卡顿问题

    一.使用css,jquery,canvas制作动画 1.Canvas 优点:性能好,强大,支持多数浏览器(除了IE6.IE7.IE8),画出来的图形可以直接保存为 .png 或者 .jpg的图形: 缺 ...

最新文章

  1. 前端资源预加载并展示进度条
  2. arduino红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法
  3. 浅谈 Linux 内核开发之网络设备驱动
  4. shell批量插入数据
  5. 网站页面设计基本尺寸
  6. Mysql8 group replication组复制集群单主多主模式切换
  7. 汽车租赁php参考文献,求租赁或者汽车租赁的英文参考文献
  8. Goodfellow新研究:对抗样例让机器与人类双双上当 | 论文
  9. array_filter移除空数组
  10. 【CNN回归预测】基于matlab卷积神经网络CNN数据回归预测【含Matlab源码 2003期】
  11. 简单欧拉公式c语言算法,算法之_欧拉公式
  12. iOS开发图片合成,多张图片合成一张图片
  13. AR涂涂乐项目之识别图制作模型的制作一
  14. 人工智能一词,正在被“夸克们”玩坏
  15. C# winform程序调用Console控制台办法
  16. Hexo博客页脚添加ICP备案号
  17. 如何将普通交换机实现POE供电?
  18. pytorch dali 加速 dali支持的数据处理列表,mxnet tensorflow caff读取数据转换 pytorch训练
  19. MBR磁盘和GPT磁盘的基本磁盘和动态磁盘,FAT和NTFS文件系统——小结
  20. 挤爆牙膏的ARM面临众叛亲离局面,不给华为用,而高通有意抛弃

热门文章

  1. 机器学习中规则化和模型选择知识
  2. 【探索HTML5第二弹05】响应式布局(中),一步一步响应式布局
  3. SOAP 1.1 - 学习
  4. 64位进程调用32位dll的解决方法
  5. SQL Server 2000 JDBC驱动的完整安装及测试说明
  6. ps、grep和kill联合使用杀掉进程
  7. (原創) 如何使用C++/CLI读/写jpg檔? (.NET) (C++/CLI) (GDI+) (C/C++) (Image Processing)
  8. JDK源码学习笔记——TreeMap及红黑树
  9. Python+Appium寻找蓝牙/wifi匹配
  10. [Jinkey 原创]震惊!iOS 系统居然自带悬浮窗口调试工具