【发布时间】:2014-03-06 16:37:29
【问题描述】:
如果我们有这样的 .h 文件:
@interface TestViewController : UIViewController {
__weak NSObject *object;
}
@end
.m 文件中的方法如下:
- (void)viewDidLoad {
[super viewDidLoad];
NSObject *localObject = [[NSObject alloc] init];
NSLog(@"%ld", CFGetRetainCount((__bridge CFTypeRef)localObject));
object = localObject;
NSLog(@"%ld", CFGetRetainCount((__bridge CFTypeRef)object));
NSLog(@"%ld", CFGetRetainCount((__bridge CFTypeRef)localObject));
}
然后我们得到以下保留计数的输出:
1
2
1
我的问题是,为什么当“object”声明为“__weak”实例变量时,保留计数会增加到 2,而且“localObject”保留计数仍然为 1。 我认为这是因为 ARC 如何插入保留/释放,但我不确定。
【问题讨论】:
-
您可能会在这里找到答案:@Martin R 建议的stackoverflow.com/a/4636477/1187415
-
CFGetRetainCount() 在所有方面都与 -retainCount 相同,包括无用。
标签: ios objective-c memory-management automatic-ref-counting