SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];
なぜそれはいつもそのように行われるのですか?なぜだめですか
self.theObject = [[SomeObject alloc] init];
SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];
なぜそれはいつもそのように行われるのですか?なぜだめですか
self.theObject = [[SomeObject alloc] init];
プロパティが保持プロパティである場合theObject
、メモリ リークがないため、最初の方法が正しいです。また、次の 2 番目のバージョンを正しく記述する方法よりも効率的です。
self.theObject = [[[SomeObject alloc] init] autorelease];
でオブジェクトを作成するときはいつでも、またはalloc
によってオブジェクトを解放する責任があります。release
autorelease
2番目のバージョンはSomeObjectインスタンスをリークします。これは、self.theObjectがセッターを呼び出し、適切に記述されている場合、オブジェクトを保持するためです。
あなたはただすることができます
theObject = [[SomeObject alloc] init];
そして何人かの人々は確かにそうします。ただし、一貫性を保つため、またはアクセサに副作用がある場合のバグを回避するために、常にアクセサを使用することを好む人もいます(たとえば、KVO通知をバイパスします。これは、initメソッドの一部でない場合に問題になる可能性があります)。