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;

また、コードの外観から、これをメンバー変数に保存しているように見えます。そうする理由はありますか?そうでない場合は、ローカル変数にします。その場合、parse() を呼び出した後ではなく、クラスの dealloc() メソッドで解放することをお勧めします。

于 2009-05-08T19:58:03.550 に答える
1

deallocこれはインスタンス変数なので、メソッド内で解放するのが正しい方法です。しかし、あなたのコードはそのシナリオでは間違っています。parseXMLData:2 回続けて電話をかけることを想像してみてください。provisioningParser は 2 回目に上書きされるため、dealloc.

ローカルにしたい場合は、ローカルに宣言し、メソッドを終了します

return [[provisioningParser autorelease] parse];

NXSMLParser 'parserWithData:' を使用して割り当てることができ、これを行う必要はありません (ただし、メソッドに対してローカルに移動する必要があります)。

于 2009-05-08T20:20:09.253 に答える