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

野指针与僵尸对象

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. 没有存储任何内存地址的指针就称为空指针(NULL指针)。 2....
    刘应阅读 5,744评论 4 20
  • 循环引用:http://ios.jobbole.com/82077/类别的作用功能:1.扩充现有类的功能2.对现有...
    得一切从简阅读 534评论 0 1
  • 开始知道它绝对是因为这是苏有朋执导的另一部电影,然后了解到它是一本很有名的小说,花了两天的休息时间将它看完。 这本...
    阿西小败阅读 472评论 0 1
  • 杀蓝:02 06 09 12 16 蓝球范围: 01 03 05 07 08 10 13 14 15 01 05 ...
    99b48d6a94c7阅读 164评论 0 0
  • 群里伙伴们,大家早上好!我是张丽梅。刚刚挂断文峰老师的教练电话,还有点小激动。我今天教练电话的问题是:如何破解做事...
    0e853506302b阅读 449评论 0 1