0

Я собираюсь вручную управлять памятью NSMutableDictionay без использования autorelease. И каждый объект в mutableDictonary является NSArray, каждый раз, когда я добавить один массив в mutableDictionary, я собираюсь использоватьУправление памятью с помощью NSMutableDictionary на iOS

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

вопрос, как я могу ganrantee, что нет утечки памяти? Хорошо, что я непосредственно использую [mutableDict release] в dealloc? сохраняет ли keepCount mutableDict сумму всех сохраняемых значений своих объектов (сохраненных массивов)?

ответ

7
  1. Читать Cocoa Memory Management Guide, никаких оправданий.
  2. Массив получает +1 для вашего руководства retain и еще +1, потому что словарь сохраняет его. Это утечка. Оставьте свой retain, и все будет хорошо.
  3. Исправлен выпуск словаря в вашем dealloc. Если нет других сильных ссылок на словарь, он будет освобожден, освободив все объекты, содержащиеся в нем. Это означает, что ваш массив также будет освобожден, что, вероятно, вам нужно.
  4. Forget about retainCount.
  5. Действительно забыть о ... что это было?
+2

Я бы добавил 5. Действительно забыть о saveCount – vikingosegundo

0

вы можете:

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

вы можете использовать инструменты (Утечки) посмотреть, сколько просачивается проект есть.

+0

Уверен, что я не понял, что метод setObject forKey автоматически сохранит объект для диктатора, так что это нормально. Благодарю. –

0

Вам не нужно сохранять, потому что setObject уже сохранит для вас. Вы просто сохраняете словарь в своем словаре столько, сколько хотите.

См Reference