UITableView的重用机制是苹果公司为了大量的数据显示而采用的一种节省内存的机制,在大量数据的前提下,也需要有充足的显示这些数据的行(也就是UITableViewCell)。那么是否需要来创建成百上千的数据行来装这些数据,然后显示出来呢。这将会消耗大量的内存,重用机制就是来解决这一问题的。
重用机制实际上就是重用UITableView中的cell对象。当我们在显示器上滚动列表时,已经显示出来的cell会被移出显示窗口,UITableView并不是对这些cell对象置之不理了,UITableView会将移出去的cell对象放入一个对象池中,等待重用,当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,如果池中有没有使用的cell对象,dataSource会用新的数据来配置上这个重用的cell,返回给UITableView,重新显示到显示窗口中,这样就避免了再次创建cell对象
实现重用机制的方法dequeueReusableCellWithIdentifier:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
重用机制中有一个很重要的问题:
当需要自定义cell(用一个子类继承cell)而且每一行用的不一定是同一种cell,所以一个UITableView可能拥有不同类型的cell,对象池中会有许多不同的cell,那么在重用cell时会得到错误的cell。
如何解决??:cell有一个NSString *reuseldentifier属性,可以在初始化cell时传入一个特定的字符串标识来设置reuseldentifier(一般用UITableViewCell的类名)当TableView要求datasource返回cell,先通过一个字符串标识到对象池中查找对应类型的cell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象。