开发者

Stop NSXMLParser Instance from Causing _NSAutoreleaseNoPool

开发者 https://www.devze.com 2023-01-01 05:00 出处:网络
In my iPhone application, I have an instance of NSXMLParser that is set to a custom delegate to read the XML.This is then moved into its own thread so it can update the data in the background.However,

In my iPhone application, I have an instance of NSXMLParser that is set to a custom delegate to read the XML. This is then moved into its own thread so it can update the data in the background. However, ever since I have done this, it has been giving me a lot of _NSAutoreleaseNoPool warnings in the console. I have tried to add a NSAutoreleasePool to each of my delegate classes, however, this hasn't seemed to solve the problem. I have included my method of creating the NSXMLParser in case that is at fault.

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];

If anyone has any ideas to get rid of this problem, I would reall开发者_运维问答y appreciate it.

Thanks.


In objective-c each thread needs its own NSAutorelease pool to handle autoreleased objects. So in your parse method you need to create (and release) NSAutoreleasePool object:

- (void)parse{
   NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
   ...
   // your method implementation
   ...
   [pool release];
}
0

精彩评论

暂无评论...
验证码 换一张
取 消