標籤:
硬廣:《IOS效能調優系列》第三篇,持續更新,歡迎關注。
《IOS效能調優系列:Analyze靜態分析》介紹了使用靜態分析方法尋找IOS記憶體流失的方法,《IOS效能調優系列:使用Instruments動態分析記憶體流失》講解了使用Instruments的Leaks工具動態分析記憶體流失。
這兩篇都是關注於記憶體流失的,是記憶體調優首先要關注的方面。
關於記憶體的問題,除了記憶體流失以外,還可能存在記憶體不合理使用的情況,也會導致IOS記憶體警告。
記憶體的不合理使用往往比記憶體流失更難發現,記憶體流失可以更多藉助於工具的判斷,而記憶體的不合理運用更多需要開發人員結合代碼、架構來進行分析。
明確說明一下兩者的區別:
記憶體流失:是指記憶體被分配了,但程式中已經沒有指向該記憶體的指標,導致該記憶體無法被釋放,產生記憶體流失。
記憶體不合理運用:蘋果官方稱這種情況為Abandoned Memory,也就是存在已指派記憶體的引用,但實際上程式中不會使用,比片等對象加入了緩衝,但緩衝中的對象一直沒有被使用。
XCode提供的Instruments中的Allocation工具可以用來幫你瞭解記憶體的分配情況,當你的App收到記憶體警告時,首先應該用Allocation進行記憶體分析,瞭解哪些對象佔用了太多記憶體。
Instruments Allocation使用詳解
和使用 Instruments的其他工具一樣,點擊XCode的Product菜單Profile啟動Instruments:
選擇Allocation,會自動啟動Allocation工具和IOS模擬器:
啟動後Allocation面板顯示了記憶體中的對象佔用曲線,可以顯示目前中記憶體配置了哪些對象,對象的數量,以及由哪些函數進行的建立。
左側有幾個比較有用的選項:
All Objects Created
Created & Still Living
Created & Destroyed
Allocation 分析技巧
通過以上方法可以對應用的整體記憶體使用量情況有所瞭解,但記憶體不合理使用導致的記憶體警告往往是部分代碼或視圖導致的,我們往往要關注於某段時間或操作過程中記憶體的分配和使用方式,Allocation提供了這種功能。
比如在進入一個視圖前或操作前,我們在Allocation面板左側點擊Mark Generation,這時候會產生Generation A節點,顯示記憶體當前的情況:
我們可以在進入視圖後再點一次Mark Generation,在視圖退出後再點一次Mark,這樣三次產生的 Generation分別記錄了進入前、進入後、關閉後,再最後一個Generation應該記憶體被合理釋放,否則就代表了在這個視圖或操作中有泄漏或不合理的地方。
以上只是Allocation的基本運用,設計出一套使用Allocation來合理測試的方案是比較複雜的,後續慢慢介紹。
記錄,為更好的自己!
IOS效能調優系列:使用Allocation動態分析記憶體使用量情況