nil和release的使用小总结

       在OC中,经常会用到release和nil,我们通常会这样写,[obj release]; obj=nil;我们先release再把对象置为nil,这两者是有区别的。release是真正释放内存。nil是将一个对象指针置为空,切断指针和内存中对象的联系,nil本身对内存没什么影响,在处理野指针的时候很有必要。

        两个指针指向同一个对象,其中一个指针清空(=nil),不会影响另一个;两个指针指向同一个对象,其中一个释放内存release,也即retainCount-1,会影响另一个,如果引用到另一个指针会报错。

        我们来对比:

(1)引用一个retainCount=0的指针是会出错的,比如 [obj release];再NSLog(@"%@",obj); 执行这段语句是会出错的

(2)引用一个内存地址0x000000的指针是不会出错的,比如obj=nil,在NSLog(@"%@",obj);执行不会出错

(3)调用[obj release]; 指针仍然指向内存块0x221342

(4)调用obj=nil;指针不指向任何内存块,为0x000000

         所以,在调用release和=nil的时候,我们可以做一下总结:

(1)如果只是release而没有置为nil,应用程序也不能不会报错,但是会不稳定,程序的健壮性不够好,因为没有设置self.obj = nil,在release这个obj后,如果在之后又用到了这个对象,因为在系统内存中已经不存在了,程序就会崩溃,所以在release一个对象后应该也要将该对象置为nil,在之后如果用到了这个obj也不会造成崩溃。

(2)一个指针调用 release 函数,是会影响到所有指向同一对象的指针。总的来说,释放内存(rlease)方面,所有的指针是共享内存的。一个指针=nil,只会影响到本身,不会影响到所有指向同一对象的其它指针。总的来说,指针清空(=nil)方面,所有 的指针是独立的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值