什么时候发布NSXMLParser?

时间:2009-05-08 19:52:26

标签: iphone nsxmlparser

我正在使用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? 我相信它在解析完成后会自动释放;这是真的? 如果是,仪器表明存在泄漏。

你有什么想法吗?

由于

2 个答案:

答案 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:'来分配它,而不必执行任何操作(但仍应将其局部移动到方法中)。