TableView的优化

一:什么是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/start-ios/p/5491028.html

iOS-UITableView的优化(纯手打原创)相关推荐

  1. IOS UITableView性能优化

    1.关于UITableView性能的优化,很容易就让人想起UITableView的复用,那么除此之外呢?还有么有其他的方法能够优化用户的体验,或者说优化我们的设计的软件呢? 答案是:有! 一般我们在设 ...

  2. HTML5期末大作业:历史——唐宋元明清 原创源码纯手打附5500字实验报告 (HTML+CSS+JavaScript)

    html5期末大作业 历史向 唐宋元明清 纯手打 原创 文章目录 1. 网站介绍 2. 设计思路 2.1 登录页面 2.2 首页 2.3 朝代页面 总结 1. 网站介绍 网站主题:浅析中国五朝--唐宋 ...

  3. (0074)iOS开发之UITableView的优化

    写的很好引用 https://www.jianshu.com/p/af6b095aaaf3 前言 这篇文章对 UITableView 的优化主要从以下3个方面分析: 基础的优化准则(高度缓存, cel ...

  4. ios开源框架——UITableView+FDTemplateLayoutCell优化UITableViewCell高度计算

    前言 这篇文章是我和我们团队最近对UITableViewCell利用AutoLayout自动高度计算和UITableView滑动优化的一个总结.从这篇文章里,你可以读到: UITableView高度计 ...

  5. UITableView性能优化 - 中级篇

    老实说,UITableView性能优化 这个话题,最经常遇到的还是在面试中,常见的回答例如: Cell复用机制 Cell高度预先计算 缓存Cell高度 圆角切割 等等. . . 进阶篇 最近遇到一个需 ...

  6. UITableView的优化技巧

    这段时间也看了很多关于tableview优化的文章,加上前段时间自己也做了一个同时仿微博和支付宝的项目,思考了一些关于UITableView的优化技巧.UITableView是iOS开发中最常用的控件 ...

  7. 阿里巴巴如何对抗淘宝双11亿级流量?这本P9纯手打并发手册送给你

    淘宝双11,京东618,滴滴打车高峰如何抗住亿级的并发量? 这一份阿里P9纯手打的高并发系统设计手册帮你解决!这份手册分为基础篇.数据库篇.缓存篇.消息队列篇.分布式服务篇.维护篇.实战篇 新鲜出炉的 ...

  8. iOS 使用Instruments优化内存性能

    iOS 使用Instruments优化内存性能 问题 项目中使用到图片合成视频,发现内存增长十分的迅速,导致一些因为内存引起的问题,本文使用这个案例,结合Instruments工具检测和分析问题,最终 ...

  9. UITableView性能优化与卡顿

    UITableView性能优化与卡顿问题 最常用的就是cell的重用, 注册重用标识符 如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell 如果有很多数据的时候,就会堆 ...

最新文章

  1. 设置VSCode用Ctrl+鼠标滚轮上下滑动调整编辑器代码字体大小,设置Ctrl+0恢复默认字体大小
  2. Android 使用Vector 画图详解
  3. 【PC工具】简单好用的截屏gif录制小软件
  4. 亚信安全中标合肥公安局警务云平台 为警务信息化应用云化保驾护航
  5. QT的QAudioRecorder类的使用
  6. 移动端向服务端提交数据——实现简单登录
  7. android在启动时申请电话权限,app默认需要电话和存储权限的问题
  8. 送给女朋友的情人节礼物---超贴心小程序
  9. Google 2017 上海开发者大会 总结
  10. python矩阵运算算法_Python常用库Numpy进行矩阵运算详解
  11. Android 实现左右声道播放不同音乐
  12. Idea使用系列之一:Idea设置类注释模板和方法注释模板
  13. spark专业术语解释
  14. 编写autojs脚本时,vscode连接不上手机解决办法
  15. 抓住本质问题:读《戒嗔的白粥馆》 有感
  16. 荣耀X30卸载预装软件
  17. html英文读法,48个英语音标发音表
  18. windows无法连接到打印机_【Windows】如何”稳定“连接同一个局域网内的打印机?...
  19. 江苏校园舞男女生牵手用面巾纸隔开---至于吗
  20. 【linux】循序渐进学运维-基础篇-进程管理

热门文章

  1. docker helowin 迁移_禅道在docker上部署与迁移
  2. python递归遍历目录_Python实现递归遍历文件夹并删除文件
  3. 通过接口给fragment传值_Dataway 4.1.3 发布,开发一个接口不必在编写任何形式的代码,秒级交付!...
  4. python groupby用法_Python 标准库实践之合并字典组成的列表
  5. ClassLoader背景知识
  6. PolkaFoundry等成立Polkadot区块链开发协会(PBDA)
  7. One River CEO:从长远来看比特币可能达到每枚50万美元
  8. SAP License:SE16N
  9. SAP License:统驭科目的集成修改
  10. SAP License:从SAP顾问面试看职场