定位野指針除了使用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