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