1

私はこれで NSMutableDictionary のディープコピーを行っています: https://stackoverflow.com/a/5453600/555690

このような:

NSMutableDictionary *myCopy = [originalMutableDictionary mutableDeepCopy];

リリースする必要がありmyCopyますか?

4

2 に答える 2

4

ARCを使用していないと思います。コピーで作成されているため、答えは「はい」のはずです。NARC の規則は次のとおりです。

Objective-C でメソッドの最後にあるメソッドのパラメーターを解放する必要がありますか?

その特定のコードでは、retを使用して作成されてdictionaryWithObjectsいるため、すでに自動解放されていますが、retain明示的に呼び出される追加があります。ですから、答えは... 「はい」です。これは、所有権ポリシーに従います。

于 2012-08-18T16:15:06.770 に答える
2

コードは、retain作成時に戻り値に a を追加し、返す前にそれを調整しません。

NSMutableArray *ret = [[NSMutableArray arrayWithObjects:cArray count:count] retain];

// The newly-created array retained these, so now we need to balance the above copies
for (unsigned int i = 0; i < count; ++i)
    [cArray[i] release];

return ret;

これは、Cocoaの命名規則とメモリ管理規則に従っています。この規則でmutableCopyは、名前に を含むメソッドは所有された値を返します。

このメソッドから取得したディクショナリは実際にあなたが所有しており、あなたが解放する必要があります。

上記のスニペットの中央の行は、ディクショナリに含まれるオブジェクトがディクショナリ自体によってのみ所有されることを保証していることに注意してください。あなたはそれらに対して直接責任を負いません。辞書が破棄されると解放されます。

于 2012-08-18T17:44:44.177 に答える