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(可能) 对数组进行更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值