XMLドキュメントの解析にはNSXMLParserを使用しています。私は(とりわけ)次の機能を持っています:
- (void) parserDidStartDocument:(NSXMLParser *)parser {
// Init tempString
tempString = [NSMutableString string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
// save gained data for element "date"
if ([elementName isEqualToString:@"date"])
[entryDict setObject:[tempString copy] forKey:kXMLDictDateKey];
[tempString setString:@""];
}
//
// Character Handling
//
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
[tempString appendString:[[XMLParser alloc] stripUnwantedStringChars:string]]; //Just strips tabs and linebreaks and the returns the string
}
tempStringは、次のプロパティを持つインスタンス変数です。
@property (nonatomic, retain) NSMutableString *tempString;
tempStringは、便利なメソッドで開始されるため、deallocで解放する必要はありません。したがって、自動解放プールに自動的に割り当てられます。また、alloc、initアプローチを使用して次のことを試しましたが、同じ結果になりました。これが私がしたことです:
1.)機器を使用してプロジェクトを実行し、起動直後にリークを検索します。リークはありません。2.)XMLパーサーを1回実行し、リークがないか確認します。ありません。3.)XMLパーサーを再度実行します。これで、突然、[entryDict setObject:[tempString copy] forKey:kXMLDictDateKey];
リークのある行が表示されます。
私はこれらのメモリリークを何時間も調べてきましたが、何を忘れましたか?さらにコードが必要な場合はお知らせください。私の問題はこれらの行のどこかにあると思います。
追伸 私のチェックでは、パーサー(デリゲート)呼び出しの間に「dealloc」メソッドが呼び出されることが示されています。したがって、パーサーは1回だけでなく、実際には2回ロードされると思います。