iOS-TableView重用原理和注意點

來源:互聯網
上載者:User

標籤:http   使用   move   完全   code   超出   uitable   意思   儲存格   

什麼是cell的重用?#

重用機制,簡單的說意思是一行一行cell的複用

為什麼要實現重用?#

為了做到顯示和資料分離, 通過重用儲存格來達到節省記憶體的目的(一個螢幕顯示的cell數量是有限的,當螢幕滾動時候,就會調用方法擷取新出現的cell,而有的cell會滾動到螢幕外面)。

如何? cell的重用?#

通過 UITableView的“dequeueReusableCellWithIdentifier”函數來實現,從字面上理解是“出列的可重用的cell”,其實簡單說就是一個cell池,裡面放的就是你之前建立過的cell。

重用機制的實現原理?#

UITableView標頭檔,有visibleCells和reusableTableCells,visibleCells內儲存當前顯示的cells,reusableTableCells儲存可重用的cells。
TableView顯示之初,reusableTableCells為空白,
那麼tableView dequeueReusableCellWithIdentifier: 返回nil。
開始的cell都是通過[[UITableViewCell alloc] initWithStyle: reuseIdentifier: ]來建立,而且cellForRowAtIndexPath只是調用最大顯示cell數的次數。

 

注意點:#
  1. 重取出來的cell是有可能已經捆綁過資料或者加過子視圖的,如果有必要,要清除需要用與顯示的資料和remove掉add過的子視圖。

  2. 原理就是為了避免頻繁的alloc和delloc cell對象。

  3. 設計的關鍵是實現cell和資料的完全分離。

解決辦法:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  //改為以下的方法  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

所以整個過程並不難理解,但需要注意正是因為這樣的原因:配置cell的時候一定要注意,對取出的重用的cell做重新賦值,不要遺留老資料。

使用過程中,我注意到,並不是只有拖動超出螢幕的時候才會更新reusableTableCells表,還有:

  1. reloadData,這種情況比較特殊。一般是部分資料發生變化,需要重新重新整理cell顯示的內容時調用。在cellForRowAtIndexPath調用中,所有cell都是重用的。
    reloadData調用後,把visibleCells(當前顯示cell)中所有cell移入到reusableTableCells中,然後把visibleCells清空。
    cellForRowAtIndexPath調用後,再把重用的cell從reusableTableCells取出來,放入到visibleCells。

  2. reloadRowsAtIndex,重新整理指定的IndexPath。如果調用時reusableTableCells為空白,那麼cellForRowAtIndexPath調用後,是新建立cell,新的cell加入到visibleCells。老的cell移出visibleCells,加入到reusableTableCells。於是,之後的重新整理就有cell做重用了。

 

 連結:https://www.jianshu.com/p/7fb91f1ce3a5



iOS-TableView重用原理和注意點

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.