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