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

 

相关文章
相关标签/搜索