Утечка памяти в NSMutableArray с использованием Instruments - PullRequest
0 голосов
/ 01 сентября 2011

В соответствии с инструментом утечки в XCode говорится, что эта строка дает утечку памяти (100%)?

self.unsentPatients = [[NSMutableArray alloc] initWithArray:[defaults arrayForKey:UNSENT]];

Я правильно освобождаю и т. Д. На dealloc (который определенно запускается), поэтомуЯ не понимаю, где я иду не так?

Это всего лишь небольшая утечка, и анализ ничего не придумает, но, тем не менее, это все еще утечка.

С уважением,

Доминик

1 Ответ

2 голосов
/ 01 сентября 2011

Есть много вещей, которые могут помешать этому коду.

Я предполагаю, что свойство сохраняет значение, тогда вам не следует присваивать значение, как вы делаете сейчас, но больше похоже на:

NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:[defaults arrayForKey:UNSENT]];
self.unsentPatients = temp;
[temp release], temp = nil;

или

self.unsentPatients = [[[NSMutableArray alloc] initWithArray:[defaults arrayForKey:UNSENT]] autorelease];

Вам также следует избегать использования синтаксиса self. в dealloc или init, который вызовет mutator.В многопоточной среде это может вызвать проблемы.

Таким образом, правильная сделка будет:

- (void) dealloc {
   [unsentPatients release], unsentPatients = nil;
   [super dealloc][;
}
...