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方法废弃对象。