0

送信者によって暗黙的に保持されているオブジェクトを返すAppleのNSCopyingドキュメントの状態。copyWithZone:したがって、そのオブジェクトがに追加されると、保持カウントのバランスを保つためにオブジェクトにメッセージをNSMutableArray送信する必要があるようです(配列はオブジェクトを保持するため)。autorelease

したがって、ある配列の内容を別の配列にディープコピーするには、次のようなものが必要です。

NSMutableArray *destination = [NSMutableArray array];

// assume MyObject adopts NSCopying
for (MyObject *obj in myArray) 
    [destination addObject:[[obj copy] autorelease]];

しかし、私はこの回答で別のアプローチに気づきました。[ret addObject:[val copy]]メモリリークのようです。ただし、私はまったく新しいNSCopyingので、質問したいと思いました。コピーしたオブジェクトを配列に追加する場合、保持カウントのバランスを保つために、オブジェクトに自動解放メッセージを送信する必要がありますか?

編集-詳細:Clangは、自動解放を削除した後、潜在的なメモリリークを報告します。おそらく、リンクされた回答は、送信者によって暗黙的に保持されていないcopyオブジェクトを返すことを前提としています。

4

1 に答える 1

1

はい、リリースする必要がありますがautorelease、そのようなループでは使用しません。反復ごとに手動で行います

   for (MyObject *obj in myArray)
    {
        MyObject *copy = [obj copy];
        [destination addObject:copy];
        [copy release];
    }
于 2012-11-05T15:34:24.440 に答える