最简单的IOS - 内存管理 三 野指针和僵尸对象

1.野指针

 

     C语言中的野指针:定义1个指针变量.没有初始化.

    这个指针变量的值是1个垃圾值,指向1块随机的空间.

    这个指针就叫做野指针.

 

     OC中的野指针:指针指向的对象已经被回收了.这样的指针就叫做野指针.

 

 

2.对象回收的本质

     

    内存回收的本质

    申请1个变量,实际上就是向系统申请指定字节数的空间.这些空间系统就不会再分配给别人了.

    当变量被回收的时候,代表变量占用的字节空间从此以后系统可以分配给别人使用了.

    但是字节空间中存储的数据还在.(垃圾值)

 

 

    回收对象:

         所谓的对象的回收,指的是对象占用的空间可以分配给别人.

      当这个对象占用的空间没有分配给别人之前,其实对象数据还在.

  

 3.僵尸对象

    1个已经被释放的对象,但是这个对象所占的空间还没有分配给别人.这样的对象叫做僵尸对象.

 

   我们通过野指针去访问僵尸对象的时候.有可能没问题也有可能有问题.

 

   当僵尸对象占用的空间还没有分配给别人的时候.这是可以的.

   当僵尸对象占用的空间分配给了别人使用的时候就不可以.

 

 

 4.我们认为只要对象被称为僵尸对象,就应该无论如何都不允许被访问

   就希望如果访问的是僵尸对象,无论如何报错.

 

   僵尸对象的实时检查机制:

    可以将这个机制打开.打开之后.只要访问的是僵尸对象,无论空间是否分配就会报错.

 

 5.为什么默认不打开僵尸对象检测.

 

   一旦打开僵尸对象检测那么在每访问1个对象的时候都会先检查这个对象是否为1个僵尸对象,

   这样是极其消耗性能的.

 

 6.使用野指针访问僵尸对象会报错.那么如何避免僵尸对象错误?

 

   1个指针称为野指针以后.将这个指针的值设置nil

 

   1个指针的值为nil通过这个指针去调用对象的方法(包括使用点语法)的时候.不会报错.只是没有任何反应.

                    但是如果通过直接访问属性 ->就会报错.


7.无法复活一个僵尸对象


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值