标签:dea extra 阅读 sel 使用 objective 办公 实现机制 一个
时间 | 版本修改 |
---|---|
2020年4月23日 | 初版 |
- (void)release {
if (NSDecrementExtraRefCountWasZero(self)) {
[self dealloc];
}
}
//这是一个C语言的函数
BOOL NSDecrementExtraRefCountWasZero(id anObject) {
if (((struct obj_layout *)anObject)[-1].retained == 0) {
return YES;
} else {
((struct obj_layout *)anObject)[-1].retained--;
return NO;
}
}
retainCount
函数:- (NSUInteger)retainCount {
return NSExtraRefCount(self) + 1;
}
//C语言函数
inline NSUInteger NSExtraRefCount(id anObject) {
return ((struct obj_layout *)anObject)[-1].retained;
}
retained
是从0开始计数的。
NSDecrementExtraRefCountWasZero
函数,因为等于0,所以调用dealloc
销毁了该对象。retainCount
函数返回值,手动加上了1,契合了人类本身的思考方式。(所以千万不要像我一样被误导了)《Objective-C 高级编程》 1.2.3节 alloc/retain/release/dealloc 实现——学习总结
标签:dea extra 阅读 sel 使用 objective 办公 实现机制 一个
原文地址:https://www.cnblogs.com/HelloGreen/p/12764806.html