メモリ管理

2010/07/14

検索してたら、Objective-Cのメモリ管理について記載があったのでメモ書きというか、コピーw AppleDevelopper メモリ管理

<

p class="code">新しいオブジェクトに動的にメモリを割り当てる 新たに割り当てられたメモリを適切な値に初期化する 2 つのステップを完了するまで、オブジェクトは完全には機能しません。 各ステップを実行するのは別々のメソッドですが、通常は 1 行のコードに記述します。

id anObject = [[Rectangle alloc] init];

NSObject では 2 つの主要なメソッド、allocとallocWithZone:を定義しています。

+ (id)alloc; + (id)allocWithZone:(NSZone *)zone;

メソッドが引数を持たない場合、メソッド名はそれらの 4 文字のみ、つまりinitになります。 引数を持つ場合、「init」プレフィックスの後に引数のラベルが続きます。

たとえば、NSView は initWithFrame: メソッドで初期化することができます。 init...メソッドは新たに割り当てられたレシーバ以外のオブジェクトを返すかnil を返すことがあるため、プログラムでは alloc または allocWithZone: が返す値だけでなく、初期化メソッドが返す値を使用することが重要です。

次のコードは init が返す値を無視しているため、非常に危険(らしい)です。

例1

id anObject = [SomeClass alloc];
[anObject init];
[anObject someOtherMessage];

この代わりに、オブジェクトを安全に初期化するには、割り当ておよび初期化メッセージを 1 行のコードに結合する必要があります。

例2

id anObject = [[SomeClass alloc] init];
[anObject someOtherMessage];