1.简介
UITableView
的每一行都是一个
UITableViewCell
,通过
dataSource
的
tableView
:
cellForRowAtIndexPath
:
方法来初始化每
一行
UITableViewCell
内部有个默认
的子视图
:
contentView
,
contentView
是
UITableViewCell
所显示内容的父视图
,可显示一些
辅助指示视图
辅助指示视图
的作用是显示一个表示动作的图标,可以通过设置
UITableViewCell
的
accessoryType
来显示,默认是
UITableViewCellAccessoryNone(
不显示辅助指示视图
)
,其他值如下
:
UITableViewCellAccessoryDisclosureIndicator
UITableViewCellAccessoryDetailDisclosureButton
UITableViewCellAccessoryCheckmark
还可以通过cell的accessoryView属性来自定义辅助指示视图(比如往右边放一个开关)
2.原理
iOS
设备的内存有限,如果用
UITableView
显示成千上万条数据,就需要成千上万个
UITableViewCell
对象的话,那将会耗尽
iOS
设备的内存。要解决该问题,需要重用
UITableViewCell
对
象
重用原理
:当滚动列表时,部分
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
对象
3.代码