我正在使用NSXMLParser:
- (BOOL)parseXMLData:(NSData *)inData
{
provisioningParser = [[NSXMLParser alloc] initWithData: inData]; // defined if .h
[provisioningParser setDelegate:self];
[provisioningParser setShouldProcessNamespaces:NO];
[provisioningParser setShouldReportNamespacePrefixes:NO];
[provisioningParser setShouldResolveExternalEntities:NO];
return [provisioningParser parse];
}
我的问题是我应该何时发布NSXMLParser? 我相信它在解析完成后会自动释放;这是真的? 如果是,仪器表明存在泄漏。
你有什么想法吗?
由于
答案 0 :(得分:5)
既然你已经分配了它,你就需要释放它。只需在调用parse后发布它:
BOOL rval = [provisioningParser parse];
[provisioningParser release];
return rval;
此外,从代码的外观来看,您可能会将其保存在成员变量中。有没有理由这样做?如果没有,请将其设为局部变量。如果是这样,您可能希望在类的dealloc()方法中释放它,而不是在调用parse()之后。
答案 1 :(得分:1)
正确的做法是在dealloc
方法中释放它,因为它是一个实例变量。但是你的代码对于那种情况是错误的。想象一下,连续两次调用parseXMLData:
。 provisioningParser将第二次被覆盖,因此无法在dealloc
内发布。
如果您希望它是本地的,请将其声明为本地,并使用
结束方法return [[provisioningParser autorelease] parse];
您可以使用NXSMLParser'sesserWithData:'来分配它,而不必执行任何操作(但仍应将其局部移动到方法中)。