プロパティcardCellArray
がretain
またはであるかどうかを確認しますcopy
。その場合、 を呼び出しているときに、self.cardCellArray
プロパティcardCellArray
get に設定したオブジェクトの保持カウントが 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.
最後に、cardCellArray
dealloc メソッドでも解放することを忘れないでください