1

重複の可能性:
Cocoa と Objective-C による参照カウントの理解

オブジェクトを解放する必要があるとき、および iOS で自動的に解放されるときのメモリ リークと少し混乱しているので、次のコードを使用して理解してください。次のwhileブロックを使用したメソッドが 1 つあります。

-(void) oneMethod {
    NSMutableArray *returnValue = [[[NSMutableArray alloc] init] autorelease];

    while(true) { 
    ...
     MyObject *myObj = [[MyObject alloc] initWithFrequency:100];

    [returnValue addObject:myObj];

    [myObj release];
    ...
    }
}
  1. [myObj release] を呼び出す必要がありますか? または各ループで自動的に解放されますか?
  2. また、NSMutableArray init 呼び出しに autorelease を配置する必要がありますか?それとも、メソッドから戻った直後に自動的に解放されますか?

ありがとうございました!

4

3 に答える 3

1

ARC-自動参照カウントを使用する必要があります。そうすれば、割り当てられたオブジェクトを解放することを心配する必要はありません。

于 2012-12-03T14:54:04.177 に答える
1

あなたのコードは正しいです。

私はあなたがそれでもっと働くにつれてあなたはそれに慣れるだろうと思います。私はそれについて考えるのにあまり時間をかけません。

通常、作成したものはすべてリリース(または自動リリース)する必要があります。

ループは、大規模な配列の場合でも、メモリを使いやすいという点で正しくコーディングされています。

于 2012-12-03T15:14:58.423 に答える
1

早ければ早いほど、私が学んだことはより良いものです。あなたの例は、配列に挿入された各 myObj 変数を適切に解放しています。配列はオブジェクトを「所有」し、配列が存在する限りオブジェクトは存在し、変数参照が残る理由はありません。

ARCは、これらすべてを完全に不要にしているようです。ARC がすべてを行っているように、近い将来、どれだけの開発者がこの概念を学ぶことになるのでしょうか。

おそらく、ARC を使用していないため、[myObj release] を呼び出さなかった場合、ループのたびにリークが発生します。

于 2012-12-03T15:33:11.803 に答える