1

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

你有想法吗 ?

谢谢

4

2 回答 2

5

既然你分配了它,你就需要释放它。调用 parse 后释放它:

BOOL rval = [provisioningParser parse];
[provisioningParser release];
return rval;

此外,从您的代码的外观来看,您可能会将其保存在成员变量中。有这样做的理由吗?如果没有,请将其设为局部变量。如果是这样,您可能希望在类的 dealloc() 方法中释放它,而不是在调用 parse() 之后。

于 2009-05-08T19:58:03.550 回答
1

正确的做法是在dealloc方法中释放它,因为它是一个实例变量。但是您的代码在这种情况下是错误的。想象一下连续调用parseXMLData:两次。provisioningParser 将第二次被覆盖,因此无法在您的dealloc.

如果您希望它是本地的,请将其声明为本地,并以

return [[provisioningParser autorelease] parse];

您可以使用 NXSMLParser 'parserWithData:' 分配它,而不必执行任何操作(但仍应将其移动到方法的本地)。

于 2009-05-08T20:20:09.253 回答