いくつかの異なる種類の XML ファイルの解析を処理する必要があるアプリケーションを構築しています。手順を可能な限り標準化したいので、XML データの解析を処理するシングルトン クラスを作成しました。このクラスには、解析する XML データの種類を示す一意の識別子と、データ自体の 2 つのオプションが渡されます。クラス内には、解析を行い、結果を含む NSMutableArray オブジェクトを返す次の関数があります。
- (NSMutableArray*) initAPIDataParse:(NSData *)data APIRequestType:(int)requestType {
// Init parser
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// Set delegate for parser
if (requestType == kXMLParserTypeOne) {
[parser setDelegate:[[[XMLParserOne alloc] init] autorelease]];
} else if (requestType == kXMLParserTypeTwo) {
[parser setDelegate:[[[XMLParserTwo alloc] init] autorelease]];
} // etc.
// let's parse the XML
[parser parse];
[parser release];
return lastParsedDict; //lastParsedDict is the NSMutableArray object returned from the Parser delegate
}
上記のコードは魅力的に機能しますが、同じタイプの XML を複数回解析すると、次の行がリークします (これは理にかなっています)。
[parser setDelegate:[[[XMLParserOne alloc] init] autorelease]];
この問題を解決するために、デリゲートのインスタンスを使用してインスタンス変数を作成し、同じタイプの XML パーサーが再び要求されるたびにそれを解放するなど、いくつかのことを試みましたが、うまくいきませんでした。
ここで何か助けてもらえてうれしいです、どうもありがとう!