私はこれで NSMutableDictionary のディープコピーを行っています: https://stackoverflow.com/a/5453600/555690
このような:
NSMutableDictionary *myCopy = [originalMutableDictionary mutableDeepCopy];
リリースする必要がありmyCopy
ますか?
私はこれで NSMutableDictionary のディープコピーを行っています: https://stackoverflow.com/a/5453600/555690
このような:
NSMutableDictionary *myCopy = [originalMutableDictionary mutableDeepCopy];
リリースする必要がありmyCopy
ますか?
ARCを使用していないと思います。コピーで作成されているため、答えは「はい」のはずです。NARC の規則は次のとおりです。
Objective-C でメソッドの最後にあるメソッドのパラメーターを解放する必要がありますか?
その特定のコードでは、ret
を使用して作成されてdictionaryWithObjects
いるため、すでに自動解放されていますが、retain
明示的に呼び出される追加があります。ですから、答えは... 「はい」です。これは、所有権ポリシーに従います。
コードは、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
は、名前に を含むメソッドは所有された値を返します。
このメソッドから取得したディクショナリは実際にあなたが所有しており、あなたが解放する必要があります。
上記のスニペットの中央の行は、ディクショナリに含まれるオブジェクトがディクショナリ自体によってのみ所有されることを保証していることに注意してください。あなたはそれらに対して直接責任を負いません。辞書が破棄されると解放されます。