Управление памятью с NSMutableDictionary на iOS - PullRequest
0 голосов
/ 04 февраля 2012

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

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

вопрос, как я могу гарантировать, что нет утечки памяти? Это хорошо, что я напрямую использую [mutableDict release] в dealloc? равняется ли retainCount mutableDict сумме всех retainCounts его объектов (этих сохраненных массивов)?

Ответы [ 3 ]

7 голосов
/ 04 февраля 2012
  1. Прочитайте Руководство по управлению памятью какао , никаких оправданий.
  2. Массив получает +1 для вашего руководства retain и еще один +1, потому что словарь сохраняет его.Это утечка.Оставьте свой retain, и все будет хорошо.
  3. Выдача словаря в вашем dealloc - это правильно.Если нет других сильных ссылок на словарь, он освобождается, освобождая все содержащиеся в нем объекты.Это означает, что ваш массив также будет освобожден, что, вероятно, вам и нужно.
  4. Забудьте о retainCount.
  5. Действительно забыли о ... что это было?
0 голосов
/ 04 февраля 2012

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

См. Ссылка

0 голосов
/ 04 февраля 2012

Вы можете:

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

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

...