Wordpress サイトから XML フィードを介して UITableView にデータを取り込みます。投稿に画像が含まれている場合は画像付きのテーブルを表示し、含まれていない場合はデフォルトの画像を表示したかったのです。だから私の中で
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
メソッド、次のような if ステートメントがあります。
if ([elementname isEqualToString:@"content:encoded"]) {
NSString *firstImageURL = [self getFirstImageUrl:currentStory.content];
currentStory.imageURL = firstImageURL;
UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:[NSURL URLWithString: firstImageURL]]];
currentStory.image = image;
}
これは、次のような getFirstImageURL を呼び出します。
-(NSString *)getFirstImageUrl: (NSString *) html {
NSScanner *theScanner;
NSString *imageURL = nil;
theScanner = [NSScanner scannerWithString: html];
// find start of tag
[theScanner scanUpToString: @"<img" intoString: NULL];
if ([theScanner isAtEnd] == NO) {
[theScanner scanUpToString: @"src=\"" intoString: NULL];
NSInteger newLoc2 = [theScanner scanLocation] + 5;
[theScanner setScanLocation: newLoc2];
// find end of tag
[theScanner scanUpToString: @"\"" intoString: &imageURL];
}
return imageURL;
}
すべてが正常に機能しますが、テーブルのロードには約 5 ~ 6 秒かかり、場合によっては最大 10 秒かかることがあります。これは望ましくありません。最初の写真を取得するプロセスをスピードアップするために何かできることはないかと考えていました。
アップデート
したがって、さらに調査した結果、私が見ているボトルネックは、画像のダウンロードとは何の関係もないようです。実際、画像の実際のダウンロードには一貫して 2 秒もかかりません。RSS フィードをダウンロードすると、ボトルネックが発生するようです。
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
これは一貫して最も時間がかかります。
2012-03-30 14:35:11.506 gbllc[883:3203] inside grabDataForFeed
2012-03-30 14:35:11.510 gbllc[883:3203] reached loadXMLByURL
2012-03-30 14:35:11.512 gbllc[883:3203] after stories alloc
**** 5 seconds ****
2012-03-30 14:35:16.568 gbllc[883:3203] after initWithContentsOfURL
2012-03-30 14:35:16.570 gbllc[883:3203] after initWithData
2012-03-30 14:35:16.573 gbllc[883:3203] about to parse
*** I now parse the XML and download images, takes 2 seconds ***
2012-03-30 14:35:18.066 gbllc[883:3203] Parsed successfully
データ オブジェクトを割り当てた直後に、解析のためにデータを取得します。したがって、元の質問はもはや有効ではないと思います。おそらく、解析用の初期データを取得するより高速な方法があるかどうか、またはモデルを変更して json などを使用する必要があるかどうかを尋ねる必要がありますか?