iOS常见原理(一)-重用机制

  • 可变数组,用来保存当前显示的cell
NSMutableArray *visiableCells
  • 可变字典,用来保存可复用的cell
NSMutableDictionary *reusableTableCells

可复用的cell使用字典是因为可复用的可能cell不只有一种样式,这里需要字典指定key(也就是reuseIdentifier)来查找是否有可重用样式。

在这里先假设iPhone屏幕最多能显示10个cell

  1. 在这里先执行11次(最多能显示的次数+1)
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
reuseIdentifier:CellIdentifier]
// Or
[[[NSBundle mainBundle] loadNibNamed:@"XXTableViewCell"
 owner:self options:nil] lastObject];

这个时候把能10个cell(当前屏幕最多显示的数据,这里假设是10)加入到visiableCells数组当中,第11个已经创建,但是加入到此数组。
此时的reusableTableCells为空

  1. 当我们拖动屏幕的时候,第1个cell移出屏幕顶端并加入reusableTableCells当中,并为其指定特定的reuseIdentifier。此时第11个cell(已经创建好)就加入到visiableCells数组当中。

  2. 接下来的拖动当中显示新的cell,cellForRowAtIndexPath会调用,这个时候就执行重用API:传入一个CellIdentifier

tableView dequeueReusableCellWithIdentifier:CellIdentifier

底端出现的cell:
reusableTableCells(取出)-> visiableCells(放入)
顶端消失的cell:
visiableCells(取出)-> reusableTableCells(放入)
注: visiableCells当中如果没有的该标识符话,alloc即可

  1. 并不是只有超过屏幕的时候才更新reusableTableCells数组,reloadData方法 和 reloadRowsAtIndex(可能) 对数组进行更新

猜你喜欢

转载自blog.csdn.net/xiaoning0905/article/details/88977365