2
SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];

なぜそれはいつもそのように行われるのですか?なぜだめですか

self.theObject = [[SomeObject alloc] init];
4

2 に答える 2

11

プロパティが保持プロパティである場合theObject、メモリ リークがないため、最初の方法が正しいです。また、次の 2 番目のバージョンを正しく記述する方法よりも効率的です。

self.theObject = [[[SomeObject alloc] init] autorelease];

でオブジェクトを作成するときはいつでも、またはallocによってオブジェクトを解放する責任があります。releaseautorelease

于 2009-07-31T04:47:53.880 に答える
1

2番目のバージョンはSomeObjectインスタンスをリークします。これは、self.theObjectがセッターを呼び出し、適切に記述されている場合、オブジェクトを保持するためです。

あなたはただすることができます

theObject = [[SomeObject alloc] init];

そして何人かの人々は確かにそうします。ただし、一貫性を保つため、またはアクセサに副作用がある場合のバグを回避するために、常にアクセサを使用することを好む人もいます(たとえば、KVO通知をバイパスします。これは、initメソッドの一部でない場合に問題になる可能性があります)。

于 2009-07-31T04:46:52.230 に答える