美文网首页
什么是野指针?什么是僵尸对象?

什么是野指针?什么是僵尸对象?

作者: 超人_22 | 来源:发表于2017-11-16 17:44 被阅读0次

野指针与僵尸对象

1.

野指针

1>C语言中的野指针:一个指针变量指向一块随机的空间,这个指针就是野指针当我们声明一个指针变量的时候,没有为这个指针变量赋值,那么这个指针变量里面的值是一个随机的垃圾值.

2>OC中的野指针:指针指向的对象已经被释放,这个指针就叫做野指针僵尸对象:一个被释放的对象,就叫做僵尸对象对象回收的本质:是对象占用的空间系统可以分配给别的对象在未被分配给别的程序之前,其实这个对象还在,数据也还在的.但是这块空间随时有可能分配给别的程序

3>僵尸对象:

3.1>内存中的释放机制:把一个对象销毁掉,并不是把那个内存空间给销毁掉而是对象占用的空间可以分配给别的对象了在未被分配给别的对象之前,数据仍然是存在

3.2>僵尸对象一个已经被释放的对象,就叫做僵尸对象

3.3>通过野指针访问的对象就是僵尸对象有可能会出错,也有可能不会出错当僵尸对象占用的空间没有分配给别的程序的时候,就不会报错4>所以,一旦一个指针成为野指针,就不要通过这个野指针去访问对象的成员了因为这个时候有很多未知

4>通过指针去访问一个对象的时候,Xcode默认情况下不会去检查这个对象是否为一个僵尸对象可以开启Xcode的僵尸对象的检查这样的话,每次通过一个指针去访问一个对象,都会去检查这个对象是否为一个僵尸对象.如果是僵尸对象.立即报错如何开启僵尸对象实时检测->run->editManager->run->

5>既然开启僵尸对象这么多好处,为什么不默认开启?一旦开启僵尸对象,每次在使用这个指针访问对象的时候,都会检查这个对象是否为一个僵尸对象.这样会非常消耗性能

    如何避免使用僵尸对象在对象引用计数变为0的时候,给指针变量赋值nil

     不能让一个僵尸对象复活

[p1 release];//

引用计数器为0,所以对象被释放,p1是一个野指针,对象是个僵尸对象

[p1 retain];//

这句话是不可能将僵尸对象复活的,p1是一个野指针,通过野指针访问僵尸对象会报错

相关文章

  • 什么是野指针?什么是僵尸对象?

    野指针与僵尸对象 1. 野指针 1>C语言中的野指针:一个指针变量指向一块随机的空间,这个指针就是野指针当我们声明...

  • 内存泄漏

    什么是内存泄漏引起内存泄漏的原因野指针,空指针,僵尸对象 1.什么是内存泄漏 内存泄漏(Memory Leak)是...

  • 僵尸对象和野指针

    僵尸对象 僵尸对象创建的过程 野指针

  • 内存管理

    1.僵尸对象、野指针、空指针分别指什么,有什么区别? 野指针:指针变量没有进行初始化或指向的空间已经被释放。 使用...

  • iOS 常见面试题总结

    1. 空指针、野指针以及僵尸对象的理解,如何避免野指针错误。解答:内存被释放的对象为僵尸对象(不能再使用的对象)。...

  • 597,iOS 野指针和僵尸对象,IOS系统中对僵尸对象是怎么做

    野指针:指针指向的对象已经被回收掉了。这个指针就叫做野指针。僵尸对象:一个已经被释放的对象 就叫做僵尸对象 OC中...

  • iOS-空指针,野指针,僵尸对象

    浅谈一下空指针,野指针,僵尸对象。 空指针:没有存储任何内存地址的指针,空指针的值是0; 野指针:指针指向的对象已...

  • 野指针和僵尸对象

    野指针 僵尸对象 无法复活僵尸对象 检测僵尸对象方法 target--->diagnostics--->Zombi...

  • 内存管理--35:僵尸对象(Zombie Object)

    僵尸对象 已经被销毁的对象,我们就称这个对象为“僵尸对象” 野指针 当一个指针指向一个僵尸对象,我们就称为这个指针...

  • 僵尸对象、野指针、空指针是什么?

    僵尸对象: 已经被销毁的对象(xcode 中默认不实时检查僵尸对象) 野指针: 指向僵尸对象(不可用的内存)的指针...

网友评论

      本文标题:什么是野指针?什么是僵尸对象?

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