0

我將手動管理NSMutableDictionay的內存,而不使用autorelease。而在mutableDictonary每個對象是一個的NSArray,我每次在mutableDictionary增加一個陣列的時候,我會用使用iOS上的NSMutableDictionary進行內存管理

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

的問題是,我怎麼能ganrantee,有沒有內存泄漏?我直接在dealloc中使用[mutableDict release]是好事嗎? mutabledict的retainCount是否等於其對象的所有retainCounts(那些保留的數組)的總和?

回答

7
  1. 閱讀Cocoa Memory Management Guide,沒有任何藉口。
  2. 數組得到一個+1手冊retain和另一個+1,因爲字典保留它。這是一個泄漏。離開你的retain,它會沒事的。
  3. 發佈您的dealloc字典是正確的。如果沒有其他強大的字典引用,它將被釋放,釋放其中包含的所有對象。這意味着你的數組也將被釋放,這可能是你想要的。
  4. Forget about retainCount
  5. 真的忘了......這是什麼?
+2

我會加5分。真的忘記了retainCount – vikingosegundo 2012-02-04 08:09:27

0

,您可以:

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

您可以使用儀器(泄漏)看到多少泄露你的項目有。

+0

當然,我沒有意識到setObject forKey方法會自動保留dictonary的對象,所以沒關係。謝謝。 – 2012-02-04 08:17:24

0

你不需要保留,因爲setObject已經爲你做了保留。只要你想保留字典上的保留字。

Reference