iOS 內(nèi)存優(yōu)化

1. 避免內(nèi)存泄漏

① 避免對象之間循環(huán)引用(代理一定要弱引用)
② block 中對象的循環(huán)引用、添加的通知在銷毀的時候移除監(jiān)聽
③ NSTimer 銷毀的時候要從runLoop中移除掉
④ C 語言庫的以 create、alloc 或者?copy 創(chuàng)建出來的結(jié)構(gòu)體 記得即時release

2. 視圖view優(yōu)化

① 重用和延遲加載(lazy load)Views

模仿`UITableView`和`UICollectionView`的操作:不要一次創(chuàng)建所有的subview,而是當(dāng)需要時才創(chuàng)建,當(dāng)它們完成了使命,把他們放進一個可重用的隊列中。

② 避免使用過于龐大的XIB

當(dāng)你加載一個XIB的時候所有內(nèi)容都被放在了內(nèi)存里,包括任何圖片。如果有一個不會即刻用到的view,你這就是在浪費寶貴的內(nèi)存資源了當(dāng)你加載一個引用了圖片或者聲音資源的nib時,nib加載代碼會把圖片和聲音文件寫進內(nèi)存。在OS X中,圖片和聲音資源被緩存在named cache中以便將來用到時獲取。在iOS中,僅圖片資源會被存進named caches。

③ 避免約束濫用,盡量使用frame控制視圖的位置,使用frame還可以提升性能

④ 視圖view和layer 選擇

view和layer的主要區(qū)別在于view是有點擊事件,而layer是沒有點擊事件不需要事件響應(yīng)的視圖可以使用layer代替,而且layer的動畫比view的動畫更加流暢(layer動畫是在后臺線程處理)

3. 圖片優(yōu)化

① 在Image Views中調(diào)整圖片大小如果要在`UIImageView`中顯示一個來自bundle的圖片,你應(yīng)保證圖片的大小和UIImageView的大小相同。在運行中縮放圖片是很耗費資源的,特別是`UIImageView`嵌套在`UIScrollView`中的情況下。如果圖片是從遠端服務(wù)加載的你不能控制圖片大小,比如在下載前調(diào)整到合適大小的話,你可以在下載完成后,最好是用子線程縮放一次,然后在UIImageView中使用縮放后的圖片。

② `imageNamed` 和`imageWithContentsOfFile`

如果你要加載一個大圖片而且是一次性使用,那么就沒必要緩存這個圖片,用`imageWithContentsOfFile`足矣,這樣不會浪費內(nèi)存來緩存它。然而,在圖片反復(fù)重用的情況下`imageNamed`是一個好得多的選擇。

4. 使用Autorelease Pool

堆棧調(diào)用層級較深(如循環(huán)、遞歸)過久導(dǎo)致一些棧底局部變量長時間持有,使用Autorelease 可以提前釋放一些不要的局部變量

5. 正確的使用Cache (二級緩存)

那些不大可能改變但是需要經(jīng)常讀取的東西,比如遠端服務(wù)器的響應(yīng),圖片,甚至計算結(jié)果(如UITableView的行高)你可以用NSCache 。NSCache和NSDictionary類似,不同的是系統(tǒng)回收內(nèi)存的時候它會自動刪掉它的內(nèi)容。

6. 減少一些工具類使用,盡量使用分類、或者使用C函數(shù)

項目中一些無用的類不要參與編譯,類本身就是一個類對象需要開銷同時也可以給app瘦身;一些快速構(gòu)造或者可以getter性的方法可以使用分類,計算性的或者跟對象扯不上關(guān)系一些方法 可以采用C函數(shù)代替,OC面向?qū)ο蟮谋举|(zhì)還是C/C++的一個封裝

7. 處理內(nèi)存警告

注冊并接收 UIApplicationDidReceiveMemoryWarningNotification的通知,一旦收到這類通知,你就需要釋放任何不必要的內(nèi)存使用。 例如,UIViewController的默認行為是移除一些不可見的view,它的一些子類則可以補充這個方法,刪掉一些額外的數(shù)據(jù)結(jié)構(gòu)。一個有圖片緩存的app可以移除不在屏幕上顯示的圖片。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容