IOS效能調優系列:使用Instruments動態分析記憶體流失,調優instruments

來源:互聯網
上載者:User

IOS效能調優系列:使用Instruments動態分析記憶體流失,調優instruments

硬廣:《IOS效能調優系列》第二篇,持續更新,歡迎關注。

第一篇介紹了Analyze對App做靜態分析,可以發現應用中的記憶體流失問題,對於有些記憶體流失情況通過靜態分析無法解決的,可以通過動態分析來發現,分析起來更有針對性。

從本篇開始介紹XCode提供的強大的分析工具Instruments,記憶體分析只是Instruments中的一個功能,其他功能後續介紹。

使用Instruments動態分析記憶體流失

 Instruments中的Leaks功能主要用於分析記憶體流失,還是以《IOS效能調優系列:Analyze靜態分析》裡記憶體流失的例子還實驗:

 1 //截取部分映像 2 +(UIImage*)getSubImage:(unsigned long)ulUserHeader 3 { 4     UIImage * sourceImage = [UIImage imageNamed:@"header.png"]; 5     CGFloat height = sourceImage.size.height; 6     CGRect rect = CGRectMake(0 + ulUserHeader*height, 0, height, height); 7       8     CGImageRef imageRef = CGImageCreateWithImageInRect([sourceImage CGImage], rect); 9     UIImage* smallImage = [UIImage imageWithCGImage:imageRef];10     //CGImageRelease(imageRef);11      12     return smallImage;13 }

用注釋注釋掉CGImageRelease(imageRef)這行,即使在ARC開啟的環境下,仍然會導致記憶體流失(Arc is only for NSObject)。

使用Leaks開始動態分析,點擊XCode的Product菜單Profile啟動Instruments:

選擇Leaks,會自動啟動Leaks工具和IOS模擬器:

Leaks啟動後會開始錄製,隨著對模擬器啟動並執行App的操作,可以在Leaks中查看記憶體佔用的情況。

註:如果你的項目使用了ARC,隨著你的操作,不斷開啟或關閉視圖,記憶體可能持續上升,但這不一定表示存在記憶體流失,ARC釋放的時機是不固定的。

Leaks頂部分為兩欄:Allocations和Leaks,右側的曲線代表記憶體配置和記憶體流失曲線。

點擊第二欄Leaks,進行記憶體流失分析,左下角會出現Leaks調試的選項:

建議把Snapshot Interval間隔時間設定為10秒,勾選Automatic Snapshotting,Leaks會自動進行記憶體捕捉分析。

在你懷疑有記憶體流失的操作前和操作後,可以點擊Snapshot Now進行手動捕捉。

以下是切換到我的App中調用 +(UIImage*)getSubImage:(unsigned long)ulUserHeader 函數的視圖,可以發現記憶體流失:

Leaked Object的表格中顯示了記憶體流失的類型、數量及記憶體空間。

點擊具體的某個記憶體流失對象,在右側Detail視窗中會出現導致泄漏可能的位置,其中黑色頭像代表了最可能的位置。

Leaks已成功找出了[CMTool getSubImage:]這個函數:

記憶體流失動態分析技巧

 

熟練使用Leaks後會對記憶體流失判斷更準確,在可能導致泄漏的操作裡,多使用Snapshot Now手動捕捉。

開始時如果裝置效能較好,可以把自動貼齊間隔設定為5秒鐘。

使用ARC的項目,一般記憶體流失都是malloc、自訂結構、資源引起的,多注意這些地方進行分析。

開啟ARC後,記憶體流失的原因

開啟了ARC並不是就不會存在記憶體問題,蘋果有句名言:ARC is only for NSObject。

在IOS 中使用malloc分配的記憶體,ARC是不會處理的,需要自己進行處理。

例子中的 CGImageRef 也是一個Image的指標,ARC也不會進行處理。

記錄,為更好的自己!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.