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(可能) 對數組進行更新
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章