OC_自动引用计数器_0x03

release方法的实现

- (void)release

{

  if(NSDecrementExtraRefCountWasZero(self))

    [self dealloc];

}

BOOL

NSDecrementExtraRefCountWasZero(id anObject)

{

  if(((struct obj_layout *)anObject[-1].retained == 0)

  {

    return YES;

  }

  else 

  {

    ((struct obj_layout *)anObject)[-1].retained--;  

    return NO;

  }

}

同预想的一样,当retained变量大于0时减1,等于0时调用dealloc实例方法,废弃对象。

废弃对象时所调用的dealloc实例方法的实现。

- (void)dealloc

{

  NSDeallocObject(self);

}

inline void

NSDeallocObject(id anObject)

{

  struct obj_layout *o = &((struct obj_layout *)anObject)[-1];

  free(o);

}

1)在Objective-C的对象中存有引用计数这整数值,

2)调用alloc或是retain方法后,引用计数值加1,

3)调用release后,引用计数值减1,

4)引用计数值为0时,调用dealloc方法废弃对象。

原文地址:https://www.cnblogs.com/fkunlam/p/4903714.html