[iOS] 幾種Custom cell效能增進的嘗試

這邊只是簡單紀錄我嘗試的感覺和心得,不是完全正確,因為我沒有去測量,純粹是感覺滑動的順暢度。

我的Table view上面有兩種不同的 Custom cell,兩種都要load很多的資料到他們的UI上面,其中一種裡面甚至含有scroll view,水平方向上面放有不等數量的UIView作為subviews,因而在滑動時,不是很順暢,其中一個cell水平方向上可以scroll,放了很多UIView,這是critical load。

以下是試過的方法:

  1. 直接把全部的資料一口氣載入。
  2. 僅載入可見部分,不可見部分等到scroll停止再載入(或者叫做Lazy load的概念?不用的部份暫時先不理會,可以參考官方的範例)。
  3. 類似1,但不可見部分改由dispatch_async去處理。
結果:
  1. 當然慢
  2. 比較快,如果可以過濾掉某些已執行過的指令會更快
  3. 雖然滑動手感類似2,但UI內容會亂掉。

補充

順便提兩句,官方的範例中,實現lazy load此一概念的作法是,當table view捲動停止時才loading,他將loading寫在scroll view的兩個delegate methods內:
  • scrollViewDidEndDragging: willDecelerate:
  • scrollViewDidEndDecelerating:
然而實際使用時,我發現scrollViewDidEndDecelerating:內的呼叫會讓我卡住,這可能是load實際操作上的不同而導致的,所以我僅在scrollViewDidEndDragging: willDecelerate:裡面有呼叫lazy loading。

留言