Мешайте экземпляру NSXMLParser вызвать _NSAutoreleaseNoPool

В моем приложении для iPhone у меня есть экземпляр NSXMLParser, который установлен на пользовательского делегата считать XML. Это затем перемещено в его собственный поток, таким образом, он может обновить данные в фоновом режиме. Однако с тех пор, как я сделал это, это давало мне много _NSAutoreleaseNoPool предупреждений в консоли. Я попытался добавить NSAutoreleasePool к каждому из моих классов делегата, однако, это, казалось, не решило проблему. Я включал свой метод создания NSXMLParser в случае, если это виновным.

NSURL *url = [[NSURL alloc] initWithString:@"http://www.mywebsite.com/xmlsource.xml"];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];

CustomXMLParser *parser = [[CustomXMLParser alloc] init];

parser.managedObjectContext = self.managedObjectContext;

parser = [parser initXMLParser];

[xmlParser setDelegate:parser];

[NSThread detachNewThreadSelector:@selector(parse) toTarget:xmlParser withObject:nil];

Если бы у кого-либо есть какие-либо идеи избавиться от этой проблемы, я был бы очень признателен за ее.

Спасибо.

1
задан PF1 22 May 2010 в 19:35
поделиться

1 ответ

В objective-c каждому потоку нужен собственный пул NSAutorelease для обработки автоматически выпущенных объектов. Итак, в вашем методе parse вам нужно создать (и выпустить) объект NSAutoreleasePool:

- (void)parse{
   NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
   ...
   // your method implementation
   ...
   [pool release];
}
2
ответ дан 3 September 2019 в 00:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: