不使用ARC的年代

来源:互联网 发布:数据使用管理规定 编辑:程序博客网 时间:2024/04/27 10:36


如果不使用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 




0 0
原创粉丝点击