Делегат NSXMLParser и утечка памяти - PullRequest
0 голосов
/ 06 мая 2010

Я использую класс NSXMLParser в своей программе и назначаю ему делегата. Этот делегат, однако, сохраняется методом setDelegate:, приводящим к незначительной, но раздражающей :-) утечке памяти.

Я не могу освободить класс делегата после setDelegate: потому что программа вылетит.

Вот мой код:

self.parserDelegate = [[ParserDelegate alloc] init]; //retainCount:1
self.xmlParser = [[NSXMLParser alloc] initWithData:self.xmlData];
[self.xmlParser setDelegate:self.parserDelegate]; //retainCount:2
[self.xmlParser parse];
[self.xmlParser release];

ParserDelegate - класс делегата.

Конечно, если я укажу «self» в качестве делегата, у меня не будет проблем, но я хотел бы знать, есть ли способ использовать другой класс в качестве делегата без утечек.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 06 мая 2010

Из документации на setDelegate:

"Объект, который является новым делегатом. Он не сохраняется. Делегат должен соответствовать протоколу протокола NSXMLParserDelegate."

Так что не беспокойся. Кроме того, даже если он был сохранен, правильный класс NSXMLParser освободит делегат в 'dealloc'. Так что я не думаю, что у вас есть утечка.

Причиной сбоя является то, что вы освобождаете делегата, поскольку вы уменьшаете счет удержания до 0.

0 голосов
/ 10 сентября 2011

Если у вас есть свойство parserDelegate, установленное как retain и использующее синтезированные методы (используя self), чтобы установить его изначально, то это, вероятно, ваша утечка.

...