美文网首页
iOS • 记——UITableView的优化总结

iOS • 记——UITableView的优化总结

作者: 行走的苹果哥 | 来源:发表于2016-12-15 16:49 被阅读66次

iOS开发中,我们最常用就是表格视图(UITableView),最近阅读了一些大牛的博客,学习了一些关于UITableView的资料,对TableView有了更深的理解,对此写下一些总结。

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。

为什么要优化?

我们知道,现在的手机跟电脑一样,也有CPU和GPU,CPU主要从事逻辑计算的一些工作,GPU主要从事图形处理方面的工作。

CPU和GPU都是为了完成计算任务而设计,CPU的核少,而核内空间非常大,能够处理复杂的逻辑,GPU核多,但是每个核的空间相对较小,故而处理复杂逻辑的空间较少。

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

UITableView的具体优化

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

2)对于不定高的cell,提前将每个cell的高度存入数组,出现一个cell的时候,直接从数组中拿出确切的高度即可,不用临时计算cell的高度,图文混排、评论等对于固定高的cell和不定高的cell同样适用;

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

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

5)尽量使用懒加载,又称为延迟加载 实际上是重写某个对象的getter方法 原理:程序一开始并不对它进行初始化 而是在用到他的时候 才为他开辟内存供它使用,这样写的好处就是代码可读性强,代码之间独立性强,松耦合;

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

7)设置每个cell的opaque属性,即不透明属性;

8)分段加载数据。

相关文章

网友评论

      本文标题:iOS • 记——UITableView的优化总结

      本文链接:https://www.haomeiwen.com/subject/crbwmttx.html