我正在使用 ARC,但正在阅读 Objective-C 的 MRR 部分,并且似乎ViewController是(对于非 ARC)的属性:
@property (retain, nonatomic) Foo *foo;
那么viewDidLoadofViewController将需要在andrelease之后做一个:allocinit
- (void)viewDidLoad
{
[super viewDidLoad];
self.foo = [[Foo alloc] init];
[self.foo release];
}
否则,retainFoo 对象在分配给_foo(实例变量)时会增加一次引用计数,并且alloc还会增加一次引用计数,因此它声称拥有两次所有权,因此,release在alloc和init?
我只是觉得它看起来有点奇怪,因为 analloc后面紧跟着 arelease这种方式。
(如果我们这样做是 a self.foo = [Foo fooByString: @"hello"],那么自动释放池声明了一个所有权,ViewController 声明了一个所有权,并且在事件循环结束时,自动释放池耗尽,并取消声明一个所有权,因此 Foo 对象被正确拥有仅一次。(但如果 Foo 没有这样的方法并且只有allocand init,那么就release需要立即数。))