私はARCを使用していますが、Objective-CのMRR部分を読んでおり、のプロパティViewControllerが(非ARCの場合)である場合のようです。
@property (retain, nonatomic) Foo *foo;
次に、viewDidLoadの直後ViewControllerに実行する必要があります:releaseallocinit
- (void)viewDidLoad
{
[super viewDidLoad];
self.foo = [[Foo alloc] init];
[self.foo release];
}
それ以外の場合、は(インスタンス変数)にretain割り当てられたときにFooオブジェクトの参照カウントを1回インクリメントし、参照カウントも1回インクリメントするため、所有権を2回要求するため、直後に存在する必要があります。および?_fooallocreleaseallocinit
の直後にこの方法allocが続くので、少し奇妙に見えると思います。release
(もしそうならself.foo = [Foo fooByString: @"hello"]、1つの所有権は自動解放プールによって主張され、もう1つはViewControllerによって主張され、イベントループの終わりに、自動解放プールは排出され、1つの所有権を主張しないため、Fooオブジェクトは正しく所有されます一度だけ。(ただし、Fooにそのようなメソッドがなく、 allocandしかない場合initは、即時releaseが必要です。))