オートレアルではないオブジェクトを与えるコンストラクタを使用する場合、これについて心配する必要はありません。しかし、それ以外の場合は、自動解放プールを使用する必要があります。
NSArray *anArray = [[NSArray alloc] init];
self.array = anArray;
[anArray release];
NSLog(@"Here's my array: %@", self.array); // EXC_BAD_ACCESS if array not retained
をこのwouldnに対し:
これは、その保持カウントがrelease
に0になり、それがすぐに割り当て解除されますのでarray
は、セッターによって保持されていない場合にのみ、すぐにあれば、あなたにEXC_BAD_ACCESSを取得します「トンは、すべてのエラーを引き起こし、self.array
は、すぐに自動解放プールが排出したとして、後にゴミになるにもかかわらず:
self.array = [NSArray array];
NSLog(@"Here's my array: %@", self.array); // No error for now
あなたは簡易コンストラクタを使用する必要がある場合は、単に割り当てをラップ自動解放プールにメンター:
NSAutoreleasePool *testPool = [[NSAutoreleasePool alloc] init];
self.array = [NSArray array];
[testPool drain];
NSLog(@"Here's my array: %@", self.array); // EXC_BAD_ACCESS if array not retained
この方法で、あなたは限りarray
はセッターによって保持されていないとして再度EXC_BAD_ACCESSを取得します。
[self.array release]を使用すべきではありません。テストメソッド内のローカル変数として配列を持ち、それを解放する方がよいでしょう。 – jrturton
よろしくお願いします。私の答えは決まった。 – yuji