私は NSXMLParser を実装しようとしてきましたが、これまでのところ、メモリの問題、パフォーマンスの問題、または機能しないことがありました。
私はもともとネット上の例から作業していましたが、メモリのヒープがリークしました。オブジェクトを適切に解放しましたが、要素ごとに各オブジェクトを割り当ててから解放したため、パフォーマンスが低下することがわかりました。そこで、よりうまく機能するプロパティを使用することにしましたが、辞書を配列に追加しようとすると、固執しません:
[overlay insertObject:entry atIndex:[overlay count]];
だから私は3つの質問があります。プロパティは、メモリ管理の問題を処理するための最良の方法ですか? もしそうなら、NSDictionary * エントリをオーバーレイに保存できないのはなぜですか? プロパティが最善の方法ではない場合、何が最善の方法ですか?
乾杯
編集:比較的小さなxmlファイルを扱っていますが、多くの要素があります。それらを URL からダウンロードし、データを SQLite データベースに配置しました。
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([attributeDict objectForKey:@"title"]) {
self.title = [attributeDict objectForKey:@"title"];
} else if ([attributeDict objectForKey:@"lng"]) {
self.latitude = [attributeDict objectForKey:@"lng"];
self.longitude = [attributeDict objectForKey:@"lat"];
}
if (title && latitude) {
NSMutableDictionary *entry = [[NSMutableDictionary alloc] init];
[entry setObject:title forKey:@"title"];
[entry setObject:latitude forKey:@"latitude"];
[entry setObject:longitude forKey:@"longitude"];
[overlay insertObject:entry atIndex:[overlay count]];
[entry release];
NSLog(@"%@", overlay);
}
}
唯一のデータが属性にあるため、他のデリゲート呼び出しは使用されていません。最後の NSLog は単に null を返します。