IOS OBjective-C 内存概念 (4、循环引用和总结)

一、循环引用和总结(内存管理的经典问题)

    对象A retain对象B,同时对象B retain对象A。这时两个对象A和B都没有办法得到释放。这种情况我们称之循环引用。如下示:

//B类中设置A
- (void)setA:(A *)a
{
   if(_a != a)
   {
      [_a release];
      _a = [a retain];
   }
}
- (void)dealloc
{
   [_a release];
   [super dealloc];
}
//A类中设置B
- (void)setB:(B *)b
{
   if(_b != b)
   {
      [_b release];
      _b = [b retain];
   }
}
- (void)dealloc
{
   [_b release];
   [super dealloc];
}

二、内存管理总结

    当你使用new、alloc或copy方法创建一个对象时。该对象的引用计数为1。当不在使用该对象时,你要负责向该对象发送一条release或者autorelease消息。这样,该对象将在其使用对象结束时销毁。

    你通过任何其他方法获得一个对象时,则假设该对象的引用计数为1,而且已经被设置为自动释放,你不需要执行任何方法来释放对象。如果你打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它。

    如果你保留了某个对象,你需要释放或自动释放该对象。必须保持retain方法和release方法的使用次数相等。

    除了alloc、new或copy之外的方法创建对象都被声明了autorelease。谁retain,谁release。只要你调用了retain,无论这个对象是如何生成的,你都要调用release。




转载于:https://my.oschina.net/u/1426828/blog/298639

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值