プロパティcardCellArrayがretainまたはであるかどうかを確認しますcopy。その場合、 を呼び出しているときに、self.cardCellArrayプロパティcardCellArrayget に設定したオブジェクトの保持カウントが 1増加します。
alloc& init( など)を使用してオブジェクトを作成するinitWithCapacity:と、保持カウント 1 のオブジェクトが返されます。これは、allocここでメソッドを呼び出しているためです。オブジェクトを返すなどの
呼び出しなしでオブジェクトを作成している間(必要に応じて、保持カウントが1ずつ自動的に減少します)、保持カウントが0であると見なすことができます。alloc[NSMutableArray arrayWithCapacity:]autorelease
メソッドdeallocでは、 を呼び出す必要があります[self.cardCellArray release]。これにより、配列が保持するすべてのオブジェクトが自動的に削除されます。
ここのコードは、後にretain-count-1オブジェクトを生成します
[[NSMutableArray alloc] initWithCapacity:kTotalNumberOfCards]
このオブジェクトの保持カウントは、呼び出すと 2 になります
self.cardCellArray = xxx
しかし、dealloc では cardCellArray の保持カウントを減らさなかったので、リークが発生しました。
コードを次のように変更します
self.cardCellArray = [[[NSMutableArray alloc] initWithCapacity:kTotalNumberOfCards] autorelease];
autorelease は、必要に応じて保持カウントを自動的に減らします。
またself.cardCellArray = [NSMutableArray arrayWithCapacity:kTotalNumberOfCards];
また
NSMutableArray *_array = [[NSMutableArray alloc] initWithCapacity:kTotalNumberOfCards];
self.cardCellArray = _array;
[_array release];
また
cardCellArray = [[NSMutableArray alloc] initWithCapacity:kTotalNumberOfCards];
//this helps because it doesn't call `[self setCardCellArray]` which generate +1 retain count.
最後に、cardCellArraydealloc メソッドでも解放することを忘れないでください