zoukankan      html  css  js  c++  java
  • 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所示。

  • 相关阅读:
    MODBUS 数据格式相关记录
    STM32Cube基础工程配置
    QT5学习记录(一)
    求最大值
    算法训练方格取数
    传纸条
    分组背包
    混合背包
    二维背包
    多重背包
  • 原文地址:https://www.cnblogs.com/Mr-Ygs/p/5659520.html
Copyright © 2011-2022 走看看