SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];
どうしてそんなことができますか?なぜ目的-cにおけるこの点について教えてください
self.theObject = [[SomeObject alloc] init];
SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];
どうしてそんなことができますか?なぜ目的-cにおけるこの点について教えてください
self.theObject = [[SomeObject alloc] init];
theObject
プロパティが保持プロパティの場合、メモリがリークしないため、最初の方法は正しいです。あなたはalloc
でオブジェクトを作成するたびに、あなたがどうかrelease
またはautorelease
によって、何とかそれを解放を担当している
self.theObject = [[[SomeObject alloc] init] autorelease];
:それは、この第二のバージョンを、書くためにも正しい方法よりも効率的です。
第二のバージョンはSomeObjectのインスタンスをリーク、self.theObjectが正しく書き込まれている場合、セッターを呼び出すので、オブジェクトを保持します。
あなただけ
theObject = [[SomeObject alloc] init];
を行うことができ、いくつかの人々は確かに行います。他のものは、アクセサーに副作用がある場合には、一貫性のためにバグを避けるためにアクセサーを常に使用することを好みます(例として、KVO通知をバイパスしますが、これはinitメソッドの一部ではない場合があります)。
技術的にはオブジェクトを作成するallocなので、initではなくリリースが必要です。 – smorgan
ありがとう、良いキャッチ。 –
うん、私もそれに気づいた。しかし、ありがとう。私は本当に他の言語でガベージコレクションを評価し始めています。 – mk12