UITableViewCell的重用
来源:互联网 发布:ps4能不能安装windows 编辑:程序博客网 时间:2024/05/16 16:19
UITableViewCell的重用
一、Cell的重用原理:
当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象。
还有一个非常重要的问题:有时候需要自定义UITableViewCell(用一个子类继承UITableViewCell),而且每一行用的不一定是同一种UITableViewCell,所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多不同类型的UITableViewCell,那么UITableView在重用UITableViewCell时可能会得到错误类型的UITableViewCell。
解决方案:UITableViewCell有个NSString *reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象。
解决方案:UITableViewCell有个NSString *reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象。
二、Cell的性能优化
UITableView默认只会加载出现在屏幕上面的cell,没当有一个cell移除屏幕,就会存储到缓存池里找。
性能优化步骤:
步骤一:定义cell的标识(不需要每次都创建cell标识,因此需要使用static,static标识只会在第一次创建,以后都不会创建了。)
步骤二:从缓存池里取cell
步骤三:判断取出cell是否为空,如果为空就手动创建cell。
UITableView默认只会加载出现在屏幕上面的cell,没当有一个cell移除屏幕,就会存储到缓存池里找。
性能优化步骤:
步骤一:定义cell的标识(不需要每次都创建cell标识,因此需要使用static,static标识只会在第一次创建,以后都不会创建了。)
步骤二:从缓存池里取cell
步骤三:判断取出cell是否为空,如果为空就手动创建cell。
三、如何提高tableView的性能
a、重用cell
我们都知道申请内存是需要时间,特别是在一段时间内频繁的申请内存将会造成很大的开销,而且上tebleView中cell大部分情况下布局都是一样的,这个时候我们可以通过回收重用机制来提高性能。
a、重用cell
我们都知道申请内存是需要时间,特别是在一段时间内频繁的申请内存将会造成很大的开销,而且上tebleView中cell大部分情况下布局都是一样的,这个时候我们可以通过回收重用机制来提高性能。
b、避免content的重新布局
尽量避免在重用cell时候,对cell的重新布局,一般情况在在创建cell的时候就将cell布局好。
c、使用不透明的subView
在定制cell的时候,将要添加的subView设置成不透明的会大大减少多个view层叠加时渲染所需要的时间。
d、如果方便,直接重载subView的drawRect方法
如果定制cell的过程中需要多个小的元素的话,最好直接对要显示的多个项目进行绘制,而不是采用添加多个subView。
e、tableView的delegate的方法如非必要,尽量不要实现
tableView的delegate中的很多函数提供了对cell属性的进一步控制,比如每个cell的高度,cell是否可以编辑,支持的edit风格等,如非必要最好不要实现这些方法因为快速的调用这些方法也会影响性能。
0 0
- UITableViewCell 的重用解决
- UITableViewCell的重用问题
- UITableViewCell的重用
- UITableViewCell的重用
- UITableViewCell的重用原理
- UITableViewCell的重用问题
- UItableViewCell 的重用机制
- UITableViewCell的重用代码
- UITableviewCell的重用机制
- 解析UITableViewCell的重用
- 关于UITableViewCell的重用
- 关于UITableViewCell的重用初探
- iOS-UITableviewCell的重用机制
- iOS-UITableviewCell的重用机制
- UITableViewCell对象的重用原理
- iOS-UITableviewCell的重用机制
- iOS-UITableviewCell的重用机制
- iOS-UITableviewCell的重用机制
- HTML5开发环境搭建
- JS基础——Cookie与存储
- Java对.properties文件(即java.util.Properties类)的一些操作
- Android Studio:Fetching android sdk component information问题
- iOS开发 - 百度地图后台持续定位
- UITableViewCell的重用
- Android应用正确使用扩展SD卡
- http 301 和 302的区别
- ActionScript 3操作XML 详解
- uboot的第一阶段 start.S文件源码注释
- 转:展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
- qml入门
- Unity4.x Terrain位置
- 查找一个字符串中各个字符出现的次数,用TreeMap实现