iOS平台記憶體管理的那些事

2021-07-26 08:31:35 字數 1319 閱讀 3233

ios平台的記憶體管理採用引用計數的機制。當建立乙個物件時使用alloc或者allwithzone方法時,引用計數就會+1;當釋放物件使用release方法時,引用計數就是-1;這就意味著每乙個物件都會跟蹤有多少其他物件引用它,一旦引用計數為0,該物件的記憶體就會被釋放掉;另外,ios也提供了一種延時釋放的機制autorelease,以這種方式申請的記憶體,開發者無需手動釋放,系統會在某一時機釋放該記憶體。

下圖是記憶體從申請到釋放的乙個完整示例:

在simulate上可以模擬低記憶體報警訊息;

ios模擬器 -> 硬體 -> 模擬記憶體警告;

ios的分析工具可以發現編譯中的warning,記憶體洩漏隱患,甚至還可以檢查出logic上的問題;所以在自測階段一定要解決analyze發現的問題,可以避免出現嚴重的bug;

reference-counted object is used after it is released;

以上提示均比較嚴重,可能會引起嚴重問題,需要開發者密切關注!

leak工具可以很容易的統計所有記憶體洩漏的點,而且還可以顯示在那個檔案,哪行**有記憶體洩漏,這樣定位問題比較容易,也比較方面;但是leak在統計記憶體洩漏的時候會把autorelease方式的記憶體也統計進來; 所以我們在查詢記憶體洩漏情況的時候,可以autorelease的情況忽略掉;

leak工具:

通過leak工具可以很快發現**中的記憶體洩漏,通過工具也可以很快找到發生記憶體洩漏的**段:

allocations工具可以很容易的列出所有分配記憶體的點,這樣我們可以按照分配記憶體大小來進行排序, 這樣可以很容易的發現哪些點分配的記憶體最多,而且是持續分配,這樣我們來針對性的分析這些持續分配較大記憶體的地方;

此工具會顯示出所有申請記憶體的地方,並統計申請的次數和大小; 從這個列表中可以找出記憶體申請次數最多且申請記憶體最大的語句;從而分析出哪些地方使用的記憶體最多,進而可以優化和改進;

上圖是按照申請記憶體多少來排序的,可以方便的了解哪些**申請的記憶體多;

OC學習那些事 記憶體管理

1.範圍 任何繼承了nsobject的物件,對基本資料型別無效。2.原理 每個物件內部都儲存了乙個與之相關聯的整數,稱為 引用計數器。當使用alloc new或者copy 建立乙個物件的時,物件的引用計數器設定為1。給物件傳送一條 retain訊息 可以使引用 計數器 1。給物件傳送一條 relea...

記憶體那些事

linux中的free m可以檢視當前的記憶體使用情況 yejianfeng iz23fsd free m total used free shared buffers cached mem 7869 7737 132 0 489 4419 buffers cache 2828 5040 swap ...

iOS開發那些事 響應記憶體警告

好的應用應該在系統記憶體警告情況下釋放一些可以重新建立的資源。在ios中我們可以在應用程式委託物件 檢視控制器以及其它類中獲得系統記憶體警告訊息。1 應用程式委託物件 2 檢視控制器 在檢視控制器中接收記憶體警告訊息,需要重寫didreceivememorywarning方法。viewcontrol...