1

私はメモリ管理の途中で立ち往生しています。私の質問を解決するのを手伝ってください。

NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[Object alloc]init];  
[array addObject: obj];  
[obj release];  

obj上記のコードでリリースする必要がありますか?

4

1 に答える 1

5

あなたの質問への答えは次のとおりです。はい、 ARCを使用しない場合。新しいアプリを作成している場合は、ARC の使用を真剣に検討する必要があります。

Objective-C のコンテナ オブジェクトは、常に保持/解放カウントのバランスを取ります。つまり、常にオブジェクトを追加していないかのようにメモリを管理し、独自のコードがその保持カウントのバランスをとっていることを確認する必要があります。これは規則であり、強制されていないことに注意してください。ただし、組み込みクラスがこの規則に従うことは常に信頼できます。また、静的分析 (XCode では Cmd+Shift+B) を実行して、これらの問題を検出することもできます。上記のコードでこれを特定したでしょう。

上記の場合の正しいコードは次のようになります。

NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[[Object alloc]init]autorelease];
[array addObject: obj];

また

NSMutableArray *array = [[NSMutableArray alloc]init];
Object *obj = [[Object alloc]init];
[array addObject: obj];
[obj release];

since NSMutableArray(およびそのいとこ) は、オブジェクトがコレクション内にある限り、オブジェクトを保持します。

于 2012-10-16T10:19:18.273 に答える