以下性能優(yōu)化純屬個人見解,不當之處歡迎指正。
1.布局優(yōu)化
- 在開發(fā)中創(chuàng)建視圖是再頻繁不過的,當然也有些界面需要頻繁的加載某一個視圖,此時如果你頻繁的init的話會相當消耗CPU的,更好的方案效仿UITableView復用機制來優(yōu)化是個不錯的選擇。
- 在有些界面比如addChildView結合UIButton切換會頻繁的切換View的時候,如果代碼處理不當就會一直addSubView造成不必要繪制內存消耗和其他內存消耗,這也是不合理的,避免此類情況在寫代碼的時候邏輯要清楚做好防護措施。
2.繪制優(yōu)化
- 在UIView中盡量不使用
-(void)drawRect:(CGRect)rect
,在iOS中UIView不負責視圖繪制只處理事件,正真負責繪制視圖功能交給UILayer專門處理,因此UIView是UILayer的一個代理;你可以試試在UIView中加入-(void)drawRect:(CGRect)rect
即使不做任何事內存也是一下子暴增。 - 區(qū)分需求對于不同的采用不同的方式處理繪制,是否用系統(tǒng)現(xiàn)有CALayer子類完成功能還是自定義需要通過需求采用不同的方案。
- 避免離屏渲染(CPU和GPU切換是相當消耗內存的)。
- 異步繪制。
- 繪制視圖模板盡量縮小,降低重繪頻率。
貝塞爾曲線帶箭頭動畫的上下拉刷新
不錯的實戰(zhàn)繪制Demo
3.內存泄露優(yōu)化
導致內存泄露的方式很多,但其原理就是相互持有導致誰也釋放不了,常見的場景代理、block、target-action、靜態(tài)變量、單例模式、property關鍵字使用不當也會引起。
4.啟動優(yōu)化
一般在啟動的時候減少圖片加載,不適合執(zhí)行數(shù)據(jù)量過大的請求體驗不好,可以設置Edit Scheme
Envirement Variables增加字段名: DYLD_PRINT_STATISTICS
查看啟動時間,可針對優(yōu)化。
5.UITableView圖片加載優(yōu)化
- 毋庸置疑UITableView上的圖片異步加載,并且做好緩存。
- 對于UITableView 每個cell上需要顯示的圖片過多如果只在一個線程里面下載的話,負載就會增大。可以使用線程池每張圖片單獨使用一個線程下載。可以參考我這個Demo