首页 > 移动平台 > 详细

iOS--检测野指针

时间:2016-07-11 12:11:23      阅读:299      评论:0      收藏:0      [点我收藏+]

定位野指针除了使用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所示。

技术分享

 

技术分享

 

iOS--检测野指针

原文:http://www.cnblogs.com/Mr-Ygs/p/5659520.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!