美文网首页
iOS对象的安全释放

iOS对象的安全释放

作者: Rambo__ | 来源:发表于2018-04-05 13:00 被阅读68次

    在释放了一个对象,再次访问时就会出现野指针错误。

    控制台就会打印错误信息:[NSObject isProxy]: message sent to deallocated instance 0x604000017d70

    我们可以开启MRC环境下测试:-fno-objc-arc

    NSObject *objc = [NSObject new];
    //释放对象,可是并没有修改对象的指针地址
    [objc release];  
    //再次访问时就出现野指针错误
    NSLog(@"%@",objc);
    

    开启僵尸对象,就会发现objc对象已变成了僵尸对象


    zombie.png

    想要安全释放对象,上面示例代码改成:

    NSObject *objc = [NSObject new];
    //释放对象,可是并没有修改对象的指针地址
    [objc release];  
    //这句是把对象objc 地址指向NULL的空对象
    objc = nil;
    //在OC中调用方法,在运行时会其实是向一个对象发送消息,而 nil 对象发送消息是不会报错
    NSLog(@"%@",objc);
    

    所以对象release之后并没有修改对象的指针地址,再次访问时就会出现野指针错误,想要安全释放,就要在release之后把对象置空(objc = nil),再次访问(调用方法)时,在运行时调用方法其实是向对象发送消息,OC中向nil发送消息是不会出现crash,这样就能达到安全释放。

    相关文章

      网友评论

          本文标题:iOS对象的安全释放

          本文链接:https://www.haomeiwen.com/subject/jygrhftx.html