近四年沒更CSDN了,感慨萬千,
近年來在搞一款比較大的APP,專案中代碼量100w+,里面各種三方庫、其他領域的二級制包比較多;以前這些三方、二進制都擠在一個工程目錄下,導致耦合性太大,專案看著特別雜亂臃腫,新人著手時往往無從下手;兩年前某大佬帶隊搞了一波解耦合,該拆的拆,該解的解,如今的專案還是比較清晰明了的,按照模塊劃分出各種framework進行集成,便于管理,
即使解耦合,專案中的100w+代碼量還是實實在在的,性能優化與IPA瘦身不得不提,
基本上如果專案運行起來,手機發燙頁面卡頓,不用想,肯定哪里又記憶體泄漏了;如今的手機性能,如果僅僅是開發人員技術問題導致記憶體消耗,那是到不了發燙的程度,從記憶體泄漏方面排查會比較實用,
近年來招聘程序中,記憶體優化是必考問題,很多面試者都來自于小公司,涉及專案比較小,對于記憶體優化從來沒有關注過,能說上來個一二三的,寥寥無幾,
今天我們先說說性能優化,關于IPA瘦身,下次再約,
1、屬性修飾詞
這個比較基礎了,放在這里說感覺不太合適,但又不得不說,就提一句
atomic:原子屬性,setter方法會加自旋鎖,執行緒安全,避免了執行緒中搶奪資源引起的資料例外問題,但會導致資源消耗增大,降低效率,各位酌情使用
nonatomic:非原子屬性,執行緒不安全,但效率高,開發中使用的也較多
2、UIImage的加載
常見的就是UIImage的使用了,加載圖片一般有兩種方式:
通過名字加載::[UIImage imageNamed:],系統會對其進行快取,并且不會釋放,也無法手動清理; 通過路徑加載:imageWithContentsOfFile或者initWithContentsOfFile,系統不會對其快取,圖片不在使用時,會被釋放,
對于使用頻率低、圖片比較大的資源,建議使用后者,
3、UIImage改變顏色
還有一種情況,是給UIImage改變顏色,例如專案中設定主題顏色,一些小按鈕標志也需要跟隨主題顏色而變化,
如果直接使用Core Graphics API更改UIImage顏色,那么記憶體中會額外生產一個影像,導致記憶體消耗,
建議方案設定其tintColor,圖片使用UIImageRenderingModeAlwaysTemplate的方式加載
view.tintColor = [UIColor redColor];
UIImage *image = [[UIImage imageNamed:imgName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
4、drawRect繪制
創建UIView后,如果使用drawRect對其重新繪制,那么記憶體消耗會超出你的想象,建議使用CAShapeLayer來代替drawRect
CAShapeLayer基本可以完爆drawRect,渲染快,記憶體使用高效,邊緣柔和不會有像素塊,做柱狀圖的首選,`
5、drawInContext
請使用CAShapeLayer
6、控制元件設定背景色
控制元件如果有背景色,那么會增大記憶體消耗
盡量使用UIView+控制元件方式,來達到想要的目的,
先到這里,小可愛不乖了,我去看看
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/305487.html
標籤:其他
下一篇:android 圖庫
