Проблема утечки NSDictionary - PullRequest
       14

Проблема утечки NSDictionary

0 голосов
/ 09 ноября 2010

У меня есть утечка, когда мое приложение работает на устройстве. Утечка в следующем фрагменте кода:

+ (NSMutableDictionary *)newDict:(int)index {
 NSLog(@"%@: %s: %i", [self description],__FUNCTION__, index);
 NSString *themePath;
 NSDictionary *themesDict;
 NSMutableArray *themesArray;
 NSMutableDictionary *thisThemeDict;
 if (index < 4) {
  themePath = [[NSBundle mainBundle] pathForResource:PATH_THEMES_PLIST ofType:@"plist"];
  themesDict = [NSDictionary dictionaryWithContentsOfFile:themePath];
  themesArray = [[themesDict objectForKey:KEY_THEMES] mutableCopy];
  thisThemeDict = [[themesArray objectAtIndex:index] mutableCopy];
 } else {
  themePath = [[NSBundle mainBundle] pathForResource:PATH_CHARTS_PLIST ofType:@"plist"];
  themesDict = [NSDictionary dictionaryWithContentsOfFile:themePath];
  themesArray = [[themesDict objectForKey:KEY_THEMES] mutableCopy];  
  thisThemeDict = [[themesArray objectAtIndex:0] mutableCopy];
 }
 themePath = nil;
 themesDict = nil;
 [themesArray release];
 return thisThemeDict;
}

Измеритель утечки выделил строку:

themesDict = [словарь NSDictionaryWithContentsOfFile: themePath];

Протекший объект - NSCFString, поэтому я думаю, что проблема в 'themePath'.

Я пробовал несколько решений часами ... но без удачи. Кто-нибудь может мне помочь ...

спасибо xnz

Ответы [ 2 ]

0 голосов
/ 10 ноября 2010

Код, который вы нам показали, является верным в отношении управления счетами удержания.Единственное, что может быть утечкой, это thisThemeDict, который вы возвращаете из этого метода со счетом удержания +1.Это означает, что где бы вы ни вызывали этот метод, вам нужно будет освобождать объект, который он возвращает в какой-то момент.Вы должны проверить, как вы обрабатываете объект, который этот метод возвращает в каждом месте, где он вызывается в вашей кодовой базе.

0 голосов
/ 09 ноября 2010

Вы можете использовать компилятор llvm (сборка и анализ в xcode 3.1.2 и более поздних версиях, снежный барс) для точного определения местоположения ошибки.Если вы используете Leopard (10.5), инструмент утечек иногда сообщает о несуществующих утечках памяти.У меня была такая же проблема с одним из моих проектов.Новый инструмент для обнаружения утечек в Snow Leopard на 100% лучше.

LLVM-компилятор

...