iOS--檢測野指針


定位野指針除了使用Malloc Scribble(內存塗鴉)外,還可以使用僵屍對象。所謂的僵屍對象,就是將被釋放的對象標記為僵屍,系統不會回收這些對象的內存,並讓這些內存無法被重用,因而也就不會被覆寫。

在啟用“僵屍對象”后,在調試期間,如果對象被釋放了,會被轉化為“僵屍對象”。如果再向對象發送消息,則對應的“僵屍對象”會收到這個消息,並拋出異常。異常信息中會明確描述被釋放的對象,以及接收的是哪個消息。

要開啟僵屍對象,可以勾選“Edit scheme” -> "Diagnotics" -> “Enable Zombie Objects”,如圖1所示。

我們通過一個簡單的例子來對比一下開啟僵屍對象前后程序的行為。代碼如下所示,我們將array聲明為一個__unsafe_unretained指針,其在賦值后會被立即釋放,且不會被置為nil。

__unsafe_unretained NSMutableArray *arrayM = [[NSMutableArray alloc] init];
    [arrayM addObject:@"1"];
    [arrayM addObject:@"2"];
    
    NSLog(@"=%@",arrayM);

 

在未開啟僵屍對象的情況下,程序能正常運行,並打印出數組。而如果開啟了僵屍對象,則程序會崩潰,異常信息如圖2所示。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM