0

最近、TBXML から RaptureXML に切り替えました。情報を取り込むのははるかに簡単ですが、xml テーブル ビューを含むタブ バー ボタンをタップすると、かなりの遅延が発生します。

私のviewDidLoadメソッドには次のものがあります」

events = [[NSMutableArray alloc] init];

[self loadURL];

私の loadURL メソッドは次のとおりです。

- (void)loadURL {

RXMLElement *rootXML = [RXMLElement elementFromURL:[NSURL URLWithString:@"http://api.somexml.com/xml"]];

[rootXML iterateWithRootXPath:@"//event" usingBlock:^(RXMLElement *event) {
    [events addObject:[NSArray arrayWithObjects:
                       [event attribute:@"uri"],
                       [event attribute:@"displayName"],
                       [event attribute:@"type"],
                       nil]];  
}];

[rootXML iterateWithRootXPath:@"//location" usingBlock: ^(RXMLElement *location) {
    [events addObject:[NSArray arrayWithObjects:
                       [location attribute:@"city"],
                       [location attribute:@"lat"],
                       [location attribute:@"lng"],
                       nil]]; 
}];

[rootXML iterateWithRootXPath:@"//start" usingBlock:^(RXMLElement *start) {
    [events addObject:[NSArray arrayWithObjects:
                       [start attribute:@"time"],
                       [start attribute:@"date"],
                       nil]]; 
}];



}

それをスピードアップするために私ができることはありますか?また、行数を [events count] として割り当てると、6 行しかないはずなのに 19 行になっています。助けてください。

4

1 に答える 1

2

ティルは正しい軌道に乗っています。バックグラウンド スレッドで解析する必要があります。次のようにします。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self loadURL];

    dispatch_async(dispatch_get_main_queue(), ^{
        [tableView reloadData];
    });
});

メインスレッドでテーブルビューをリロードしていることに気付くでしょう。バックグラウンド スレッドでインターフェイス要素を更新することは、少しもったいないことです。

于 2012-04-29T13:44:41.633 に答える