我通过来自 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 或其他东西?