美文网首页
野指针、空指针、僵尸对象

野指针、空指针、僵尸对象

作者: 傲骨天成科技 | 来源:发表于2020-04-16 11:50 被阅读0次

    一、僵尸对象:

    一个OC对象引用计数为0被释放后就变成僵尸对象了,僵尸对象的内存已经被系统回收,虽然可能该对象还存在,数据依然在内存中,但僵尸对象已经是不稳定对象了,不可以再访问或者使用,它的内存是随时可能被别的对象申请而占用的;

    二、野指针:

    野指针出现的原因是指针没有赋值,或者指针指向的对象已经被释放掉了,野指针指向一块随机的垃圾内存,向他们发送消息会报EXC_BAD_ACCESS错误导致程序崩溃;

    三、空指针:

    空指针不同于野指针,它是一个没有指向任何东西的指针,空指针是有效指针,值为nil、NULL、Nil或0等,给空指针发送消息不会报错,只是不响应消息而已,应该给野指针及时赋予零值变成有效的空指针,避免内存报错。

    四、nil和release

    对于一个指向对象的变量,它里面存储的是一个地址,一个指向内存中某块区域的地址。

    nil:的作用就是将这个变量置为空,不指向任何地址。

    release:的作用是将这个变量指向的内存中的对象的引用计数减一,直到引用计数为零时释放这块内存。

    所以,如果你只是做了nil操作,那么就会引起内存泄露的问题,因为它永远也不会做release操作了。

    如果你只是做了release操作,那么就有可能引起crash,原因就是只是release(我认为这个对象已经被释放)而没有将变量置为空,当你再对这个变量做操作时就会引起问题,因为你在对一个不存在的对象做操作。

    所以建议,不再需要一个对象时,除了要做release操作以外还要做nil操作。

    NSString *str; 此时str指向当前对象。所以对它的操作要小心,建议:NSString *str = nil;

    相关文章

      网友评论

          本文标题:野指针、空指针、僵尸对象

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