標籤:
通常你會發現一個圖片類的app會在一個imageView上做下面這些事情:
1 下載圖片(主要的內容圖片+帳戶圖片圖片)
2 更新時間戳記
3 展示評論
4 計算動態cell的高度
Tip#1 學習怎麼提升速度
1.開啟你的項目並點擊Product>Profile
2.在那兒選擇Custom
3.找到添加按鈕並且添加工具:Allocations,Time,Profile,Leaks
4.觀察你的應用,以及他的表現。
Tip#2 避免阻塞主線程在這個例子中你會看到第一個圖片相關的方法在資料下載並轉換成圖片對象時阻塞了主線程。你要盡量避免阻塞主線程,這對於collection中的互動對象尤為重要。網路請求?保持他們在後台運行(非同步)並且緩衝傳回的響應。你肯定不想重複處理任何操作。想象你的cell在一段沉默時間內被繪製。你的cell應該只展示已經儲存在你的裝置上的資料。這會使你感覺更好的。Tip#3 重用cells
如果你已經花了一些時間學習iOS,那麼不好意思 。這條建議是給那些新接觸iOS的同學的。你應該使用dequeueReusableCellWithIdentifier 這個方法去擷取一個table或者collection上面的cell。如果你不是這樣做的,你就浪費了一段無意義的時間和資料。 Tip#4 緩衝下載的圖片
這肯定是你在這裡讀到的最重要的一條建議了。如果你不緩衝圖片你將會遇到很大的問題。
如果你重用本地的圖片那麼請使用UIImage的方法imageNamed:。以JPG格式請求圖片將會節省時間和資源。如果你是從服務端擷取圖片那麼你就可以擷取所需要的那些圖片( If you’re getting your image from a server you have the luxury of sending the exact image that’s needed.)。 PNG檔案在記憶體中會佔用很大一部分空間。如果你對此感覺好奇你可以在樣本中將JPG換成PNG來下載一系列的PNG圖片。
使用 SDWebImage 或者 Heneke 來管理圖片。在提供的樣本中我就是用的 Heneke,在那之前我沒有聽說過它也沒有聽說
Tip#5 使用富文字標籤代價是很昂貴的
費盡周折用富文字標籤,代價太昂貴了。儘可能地避免使用這個。問問你自己是否真的需要這個。如果是的話,儘可能的做緩衝。 Tip#6 cell高度計算
如果你的table有複雜的動態高度那麼你需要緩衝計算的高度。考慮多久計算一次(尤其是對於collection views來說),你希望這些高度都是直接可用的。 Tip#7 NsDateFormatter 的痛苦
就像富文本,如果你頻繁地初始化,date formatter可以引起大量的記憶體消耗。比較理想的是你的web端為你提供可讀的文字(比起在最後的時間計算要容易很多)。如果沒有的話你可以建立一個NSDateFormatter的單例來使用。NSDateFormatter不是安全執行緒的,但是iOS7以及之後就不再是這樣了。多謝quellish提醒我這一點。 Tip#8 透明度
如果你能避免的話你建立的對象最好是不透明的(非透明的,你不能透過它看過去)。如果你有透明的圖片,系統必要要很努力地重繪這些圖片。實際上你可以在模擬器中通過點擊Debug>Clolor Blended Areas來看這些地區的問題。看到紅色的了麼,那就意味著這些地區是透明的。當你在跟一個Collectionview打交道時這將是非常耗時。理想的,你想看到整個螢幕都是綠色的。對於你的設計來說那可能是不可行的,但是力求減少你看到的紅色的數量。在樣本中你可以看到label延伸到了view的尾部,可以被清除掉。 Tip#9 不要過多使用Xib(如果可以的話使用storyboard)
如果要使用xib就要小心一點。當你載入一個Xib,整個的內容會被載入到記憶體中(圖片,隱藏的views)。但是這在storyboard中不會發生他只會執行個體化當前要用的東西。
有一些特殊的情境下使用xib很有意義。比如你可能會要使用一些第三方的架構而他們採用純程式碼的方式來寫collection的UI部分。如果你想用xib來建立一個原型cell你可以用xib來做。只是要小心不要過載。 Tip#10 使用CoreGraphics我很少需要這個,但是當你需要的時候你可以用。使用CoreGraphics並在一個view的drawRect的方法中寫你的UI代碼。
挑戰
誰不喜歡一個好的挑戰?讓我們在這兒來把它保持下來。這周花時間來做下面兩件事。
學習怎麼使用Instruments(time profiler, allocations)
通過測試圖片緩衝(關掉,開啟,觀察)來檢查學習Instruments使用的情況。
https://github.com/mcgraw/dojo-table-performance
UITableView的效能最佳化10個小技巧