我正在使用 NSXMLParser 并通过调用以下方法在同一类中解析多个 .xml 文件。
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
NSString *xmlPath = [[NSBundle mainBundle] pathForResource:@"Accessory" ofType:@"xml"];
NSData *xmlData = [NSData dataWithContentsOfFile:xmlPath];
xmlParser = [[NSXMLParser alloc] initWithData:xmlData];
xmlParser.delegate=self;
[xmlParser parse];
此外,我在 dealloc 方法中释放了解析器委托(delegate),并通过调用释放了它的内存:-
[xmlParser setDelegate:nil];
[xmlParser release];
- (void)dealloc
{
[xmlParser dealloc];
[super dealloc];
}
应用连续解析了两三个xml文件后还是崩溃了。 我在这里缺少什么。任何建议,将不胜感激。提前致谢。
最佳答案
您不能使用 ARC,因为调用 [super dealloc]
会导致编译器错误,所以我认为问题是因为您在存储 xmlParser
时没有使用 setter >。如果该代码被多次调用,那么之前持有的对 NSXMLParser
对象的引用将被泄露,因为您只需放弃它们。
最好的解决方案是确保 xmlParser
是一个属性(在实现文件中声明的私有(private)属性)并且您可以通过以下方式调用它的 setter:
self.xmlParser = [[[NSXMLParser alloc] initWithData:xmlData] autorelease];
在 dealloc
中:
self.xmlParser = nil;
删除:
[xmlParser dealloc];
自动生成的 setter 将确保安全释放以前的引用,从而阻止泄漏。
关于ios - NSXMLParser 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35131469/