UITableView優化那點事

千客發表於2016-04-13
forkingdog關於UITableView優化的框架其實已經能夠應用在一般的場景,且有蠻多的知識點供我們借鑑,藉此站在巨人的肩膀上來分析一把。

至於UITableView的瓶頸在哪裡,我相信網上隨便一搜就能瞭解的大概,我這裡順便提供下資訊點:

框架同樣根據這兩個痛點給出瞭解決方案:

高度計算

fd_heightForCellWithIdentifier:configuration方法

這裡先是通過呼叫fd_templateCellForReuseIdentifier:從dequeueReusableCellWithIdentifier取出之後,如果需要做一些額外的計算,比如說計算cell高度, 可以手動呼叫 prepareForReuse方法,以確保與實際cell(顯示在螢幕上)行為一致。接著執行configuration引數對Cell內容進行配置。最後通過呼叫fd_systemFittingHeightForConfiguratedCell:方法計算實際的高度並返回。

fd_systemFittingHeightForConfiguratedCell方法

這裡作者考慮到了如果Cell使用了accessory view或者使用了系統的accessory type,需要減掉相應的寬度。接著判斷如果使用了AutoLayout,則使用iOS 6提供的systemLayoutSizeFittingSize方法獲取高度。如果高度為0,則嘗試使用Frame Layout的方式,呼叫重寫的sizeThatFits方法進行獲取。如果還是為0,則給出預設高度並返回。

Cell重用

fd_templateCellForReuseIdentifier方法

這裡通過dequeueReusableCellWithIdentifier方法從佇列中獲取templateCell,並通過fd_isTemplateLayoutCell屬性標識其只用來充當模板計算,並不真正進行呈現,最後通過關聯物件的方式進行存取。
注意:這裡通過dequeueReusableCellWithIdentifier進行獲取,也就意味著你必須對指定的Identifier先進行註冊,註冊可以通過以下三中方法:

到這裡最重要的幾個方法已經講完了,除此之外框架還針對獲取的高度進行了快取。快取的方式分為兩種 :

總結:

UITableView優化方案其實還有很多,不同的場景選用不同的方案,實現效果達到預期,這才是我麼最終的目標。我這裡簡單介紹下其他的優化的細節:

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

UITableView優化那點事 UITableView優化那點事

相關文章