這邊只是簡單紀錄我嘗試的感覺和心得,不是完全正確,因為我沒有去測量,純粹是感覺滑動的順暢度。
我的Table view上面有兩種不同的 Custom cell,兩種都要load很多的資料到他們的UI上面,其中一種裡面甚至含有scroll view,水平方向上面放有不等數量的UIView作為subviews,因而在滑動時,不是很順暢,其中一個cell水平方向上可以scroll,放了很多UIView,這是critical load。
以下是試過的方法:
我的Table view上面有兩種不同的 Custom cell,兩種都要load很多的資料到他們的UI上面,其中一種裡面甚至含有scroll view,水平方向上面放有不等數量的UIView作為subviews,因而在滑動時,不是很順暢,其中一個cell水平方向上可以scroll,放了很多UIView,這是critical load。
以下是試過的方法:
- 直接把全部的資料一口氣載入。
- 僅載入可見部分,不可見部分等到scroll停止再載入(或者叫做Lazy load的概念?不用的部份暫時先不理會,可以參考官方的範例)。
- 類似1,但不可見部分改由dispatch_async去處理。
結果:
- 當然慢
- 比較快,如果可以過濾掉某些已執行過的指令會更快
- 雖然滑動手感類似2,但UI內容會亂掉。
補充
順便提兩句,官方的範例中,實現lazy load此一概念的作法是,當table view捲動停止時才loading,他將loading寫在scroll view的兩個delegate methods內:
- scrollViewDidEndDragging: willDecelerate:
- scrollViewDidEndDecelerating:
然而實際使用時,我發現scrollViewDidEndDecelerating:內的呼叫會讓我卡住,這可能是load實際操作上的不同而導致的,所以我僅在scrollViewDidEndDragging: willDecelerate:裡面有呼叫lazy loading。
留言
張貼留言