0

私は、自動解放を使用せずに、NSMutableDictionayのメモリを手動で管理します。 mutableDictonary内のすべてのオブジェクトは、NSArrayのであると、私はmutableDictionaryに1列を追加するたびに、私が使用するつもりだiOS上のNSMutableDictionaryによるメモリ管理

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

質問は、私は、メモリのないリークはありませんことをganranteeできるか、でしょうか? deallocで[mutableDict release]を直接使うのは良いことですか? mutableDictのretainCountは、そのオブジェクト(保持されている配列)のすべてのretainCountの合計に等しいか?

答えて

7
  1. ReferenceCocoa Memory Management Guide、言い訳読みください。
  2. 配列にはマニュアルのretainが+1、辞書に保持されているため+1になります。それはリークです。 retainを残しても問題ありません。
  3. deallocの辞書を公開していることが正しいです。ディクショナリへの他の強い参照がない場合、それは割り当て解除され、そこに含まれるすべてのオブジェクトが解放されます。つまり、配列も割り当て解除されることになります。これはおそらくあなたが望むものです。
  4. Forget about retainCount
  5. 本当に忘れています...それは何でしたか?
+2

5を追加します。実際にはretainCountを忘れてしまいます – vikingosegundo

0

あなたがすることができます

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

あなたのプロジェクトが持っているどのくらいの漏洩を参照インスツルメンツ(リーク)を使用することができます。

+0

確かに、私はsetObject forKeyメソッドが自動的にdictonaryのオブジェクトを保持することを認識していませんでした。そうです。ありがとう。 –

0

setObjectはすでにあなたのために保持するので、保持する必要はありません。あなたは、あなたが望む限り、あなたの辞書に保持しておきます。