Утечка инструментов XMLParser - PullRequest
       13

Утечка инструментов XMLParser

1 голос
/ 24 августа 2011
NSURL *url = [[NSURL alloc] initWithString:@"http://www.someurl.com/sample.xml"];
xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[url release];

XMLParser *parser = [[XMLParser alloc] initXMLParser];        //50.0%


[xmlParser setDelegate:parser];
parser = nil;
[parser release];

[xmlParser parse];                                           //50.0%
[xmlParser release];

Это мой код синтаксического анализа, и инструмент утечек показывает утечки.Я действительно не знаю, что не так или как это исправить.Какие-либо предложения?

Ответы [ 3 ]

3 голосов
/ 24 августа 2011
parser = nil;
[parser release];

... это не делает то, что вы думаете, что делает. Если предположить, что parser является свойством, то self.parser = nil и parser = nil делают совершенно разные вещи. Первый вызовет метод установки parser, который освободит старое значение и установит для свойства значение nil. Последний просто меняет указатель с его текущего местоположения на ноль.

Установив указатель на nil, вы потеряли ссылку на объект, поэтому вы мгновенно утекли объект, который был ранее ему присвоен - вы в основном пытаетесь освободить объект nil. Вам необходимо удалить звонок nil или поместить его после release (см. Ниже).

Возможно, вы думаете о том, чтобы установить указатель на nil после того, как вы его отпустили, чтобы избежать проблем, если вы попытаетесь получить к нему доступ в будущем.

Вот несколько других вопросов, которые помогут обеспечить некоторый контекст:

выпуск против ноль - Лучшая практика

Разница между выпуском и выпуском затем устанавливается в ноль

2 голосов
/ 25 августа 2011

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

Вместо того, чтобы

xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];

Выполните следующие действия

NSData *xmlData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]]; 
xmlParser = [[NSXMLParser alloc] initWithData:xmlData];

Мне удалось избавиться от утечек памяти

0 голосов
/ 24 августа 2011

Здесь аналогичный пост о утечках в парсере.У меня тоже есть эта проблема.это раздражает, но это не огромная утечка, поэтому я не слишком беспокоюсь об этом.Посмотрим, исправит ли iOS 5 проблему (если это действительно известная утечка)

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

...