- 可變數組,用來保存當前顯示的cell
NSMutableArray *visiableCells
- 可變字典,用來保存可複用的cell
NSMutableDictionary *reusableTableCells
可複用的cell使用字典是因爲可複用的可能cell不只有一種樣式,這裏需要字典指定key(也就是reuseIdentifier)來查找是否有可重用樣式。
在這裏先假設iPhone屏幕最多能顯示10個cell
- 在這裏先執行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個cell移出屏幕頂端並加入reusableTableCells當中,併爲其指定特定的reuseIdentifier。此時第11個cell(已經創建好)就加入到visiableCells數組當中。
-
接下來的拖動當中顯示新的cell,cellForRowAtIndexPath會調用,這個時候就執行重用API:傳入一個CellIdentifier
tableView dequeueReusableCellWithIdentifier:CellIdentifier
底端出現的cell:
reusableTableCells(取出)-> visiableCells(放入)
頂端消失的cell:
visiableCells(取出)-> reusableTableCells(放入)
注: visiableCells當中如果沒有的該標識符話,alloc即可
- 並不是只有超過屏幕的時候才更新reusableTableCells數組,reloadData方法 和 reloadRowsAtIndex(可能) 對數組進行更新