0

私は 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 を返します。

4

1 に答える 1

0

willcodejavaforfood が指摘したように、これは単純な問題でした。答えではないので、私にできることは投票することだけでした。

于 2010-08-16T10:57:29.170 に答える