0

自動リリースを使用せずに、NSMutableDictionayのメモリを手動で管理します。そして、mutableDictonaryのすべてのオブジェクトはNSArrayであり、mutableDictionaryに1つの配列を追加するたびに、

NSArray *newArray = [[NSArray arrayWithArray:anArray] retain]
[mutableDict setObject:newArray forKey:@"aKey"];

問題は、メモリリークがないことをどのように保証できるかということです。Deallocで[mutableDictrelease]を直接使用するのは良いことですか?mutableDictのretainCountは、そのオブジェクト(保持されている配列)のすべてのretainCountの合計に等しいですか?

4

3 に答える 3

7
  1. ココアメモリ管理ガイドを読んでください。言い訳はできません。
  2. 配列は、マニュアル用に+1を取得しretain、辞書が保持しているため、別の+1を取得します。それはリークです。あなたを省いてretain、それは大丈夫でしょう。
  3. あなたの辞書を解放することdeallocは正しいです。ディクショナリへの強力な参照が他にない場合、ディクショナリは割り当て解除され、ディクショナリに含まれるすべてのオブジェクトが解放されます。これは、アレイの割り当ても解除されることを意味します。これはおそらくあなたが望むものです。
  4. 忘れてくださいretainCount
  5. 本当に忘れて…何だったの?
于 2012-02-04T08:04:26.513 に答える
0

あなたはできる:

NSArray *newArray = [NSArray arrayWithArray:anArray];
[mutableDict setObject:newArray forKey:@"aKey"];//mutableDict will auto retain newArray.

Instruments(Leaks)を使用して、プロジェクトのリーク量を確認できます。

于 2012-02-04T08:02:50.337 に答える
0

setObjectはすでに保持を行うため、保持する必要はありません。あなたはあなたが望む限りあなたの辞書に保持を保持するだけです。

リファレンスを参照してください

于 2012-02-04T08:03:26.397 に答える