В моем приложении для 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];
Если бы у кого-либо есть какие-либо идеи избавиться от этой проблемы, я был бы очень признателен за ее.
Спасибо.
В objective-c каждому потоку нужен собственный пул NSAutorelease для обработки автоматически выпущенных объектов. Итак, в вашем методе parse
вам нужно создать (и выпустить) объект NSAutoreleasePool:
- (void)parse{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
...
// your method implementation
...
[pool release];
}