不使用ARC的年代



如果不使用ARC,那么在堆内存中所开辟的东西,都是需要使用手工进行释放的,为什么需要手工进行释放呢?
就是因为对象在创建的过程中,自动把对象内部的计数器加1,异致垃圾回收器无法把这个对象所占的内存空间释放掉

垃圾回收器:
1Java中的垃圾回收器是全自动的,只要对象没有被其它变量所引用,垃圾回收器就会在合适的时机,把对象所占内存回收掉
2OC中的垃圾回收器是半自动的,需要手动的去设置对象内部的计数器,只要计数器值不为0,垃圾回收器就不会回收这对象所占内存空间

OC中的引用计数器,在OC所有对象中占据4个字节的空间

僵尸对象:
当对象的retainCount = 0时,此时对象将会被垃圾回收器回收,这样的对象就变成了僵尸对象

野指针:
僵尸对象指的就是不可用的内存,指向僵尸对象的指针就是野指针

EXC_BAD_ACCESS错误:
1当通过野指针向僵尸对象发送消息时,系统将报出“访问坏内存”错误,这个错误也叫做“野指针错误”
2为了防止“野指针错误”,可以把对象变量的值置为nil(也就是0),向地址为0的内存发送消息时,系统不会报错,内存地址为0的指针也叫做“空指针”

空指针错误:
1在Java中,存在空指针错误,调用空指针对象的中的方法,抛出“空指针错误”
2在OC中,没有空指针错误,向地址为0的内存发送消息时,系统不会报错
例如:调用[nil release];也不报错

僵尸对象开关:
当调用僵尸对象的setter方法时,系统不会报错,此时可以打开僵尸对象检测开关:
Edit Scheme>Diagnostics>Enable Zombie Objects 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值