第五章 內存管理—第35條:用"僵尸對象"調試內存管理問題

調試內存管理問題很令人頭疼。向業已回收的對象發送消息是不安全的。這么做有時可以,有時不行。具體可行與否,完全取決于對象所占內存有沒有為其他內容所覆寫。而這塊內存有沒有移作他用,又無法確定,因此,應用程序只是偶爾崩潰。在沒有崩潰的情況下,那塊內存可能只復用了其中一部分,所以對象中的某些二進制數據依然有效。還有一種可能,就是那塊內存恰好為另外一個有效且存活的對象所占據。在這種情況下,運行期系統會把消息發到新對象那里,而此對象也許能應答,也不不能。如果能,那程序就不崩潰,可你會覺得奇怪,為什么收到消息的對象不是預想的那個呢?若新對象無法響應選擇子,則程序依然會崩潰。
Cocoa提供了"僵尸對象"(Zombie Object)這個非常方便的功能。啟用這項調試功能之后,運行期系統會把所有已經回收的實例轉化成特殊的"僵尸對象",而不會真正回收它們。這種對象所在的核心內存無法重用,因此不可能遭到覆寫。僵尸對象收到消息后,會拋出異常,其中準確說明了發送過來的消息,并描述了回收之前的那個對象。僵尸對象是調試內存管理問題的最佳方式。
在Xcode里打開此選項,這樣的話,Xcode在運行應用程序時會自動設置環境變量。開啟方法為: 編輯應用程序的Scheme,在對話框左側選擇"Run",然后切換至"Diagnostics"分頁,最后勾選"Zombie Object"選項。

scheme.png
1AEF2A0E-CCCE-457E-868C-5F1772335590.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容