このコードでメモリをリークすることはありません。配列を自分で解放すると、実行ループの最後に配列が自動解放されたときにクラッシュが発生します。
ほとんどのCocoaクラスは、新しいオブジェクトを作成するためのいくつかの方法を提供し、この規則と非常に一貫しています。
[[NSSomeObject alloc] init]
:オブジェクトを解放するのはあなたの責任です(インスタンスメソッド)。
[NSSomeObject someObject]
:オブジェクトは、通常は実行ループ(クラスメソッド)の最後に自動解放されます。とほぼ同じ[[[NSSomeObject alloc] init] autorelease]
です。
インスタンスメソッドの適切な使用法は次のとおりです。
a = [[NSMutableArray alloc] init];
// do stuff
[a release];
クラスメソッドの適切な使用法は次のとおりです。
a = [NSMutableArray array];
// do stuff, array is in the autorelease pool
Appleは、パフォーマンスを向上させるために、便利な方法からできるだけ離れることを推奨していることに注意してください。これは物議を醸すアドバイスであり、プロセッサ時間をあまり節約できない可能性があり、実際に保持することをあまり気にしない可能性のあるオブジェクトのリリースからalloc-initを分離します。