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所示。spa

 

相關文章
相關標籤/搜索