2014-05-03 52 views
1

我正在實施UICollectionView效率低下UICollectionView ...如何優化?

collectionView:cellForItemAtIndexPath:方法,我的alloc INITING一類帶插座的少數和定製按鈕,標籤textviews(這樣的drawRect被調用用於每個這些自定義按鈕和標籤的)少數。

每當每個單元出現在屏幕上時,alloc init就會被調用...導致滾動波動。

我的問題是是否有更高效的實施。據我所知,dequeueReusableCellWithReuseIdentifier: forIndexPath:是這個原因(我認爲),我理解它的重點,但是有可能比我現在有更多的優化嗎?

感謝您的幫助!

+3

你可以發佈'collectionView:cellForItemAtIndexPath:'的實現嗎? – KudoCC

+2

不能在沒有看到您的代碼的情況下優化您的代碼。 – dasblinkenlight

+0

init方法會每次調用,coz單元格是可重用的。 –

回答

6

三件事:

  1. 確保細胞是不透明的(以及所有它的子視圖的一起)。根據我的經驗,這是UICollectionViews中滾動滯後的頭號原因。擺脫任何透明度作爲最可能的罪魁禍首。
  2. 如果失敗,請轉到模擬器中的調試菜單,然後選擇「顏色混合圖層」。這將突出顯示紅色的圖層,這些圖層正在潛入Alpha通道並被重繪。
  3. 如果失敗,請嘗試使用樂器中的Core Animation工具,並查看幀速率正在下降的位置。使用時間分析器以及找到你的熱點。

我很肯定#1和#2會給你你需要的東西,但這是一個非常常見的錯誤。

+0

真棒謝謝你! – user330739

1

我得補充說另一個大罪魁禍首是UITextView。我有UITextView s鏈接檢測,並由於在iOS 7中的錯誤,我不得不nil文本屬性每次...看起來像這會導致大量的CPU Hogging,導致丟幀。

我的情況的一個簡單修復(最大20 UITextViews)是計算單元格的高度時緩存它們。我正在考慮緩存textStorage,但現在這個工作。