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

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

    对象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];
}

2、内存管理总结内存

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

    你经过任何其余方法得到一个对象时,则假设该对象的引用计数为1,并且已经被设置为自动释放,你不须要执行任何方法来释放对象。若是你打算在一段时间内拥有该对象,则须要保留它并确保在操做完成时释放它。
table

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

    除了alloc、new或copy以外的方法建立对象都被声明了autorelease。谁retain,谁release。只要你调用了retain,不管这个对象是如何生成的,你都要调用release。
循环

相关文章
相关标签/搜索