gpt4 book ai didi

ios - 从 XML 提要中抓取图像的更快方法

转载 作者:行者123 更新时间:2023-11-29 11:14:48 25 4
gpt4 key购买 nike

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

最佳答案

那是因为您正在通过网络下载图像数据本身。您需要卸载它并异步执行。有一个 NSOperationQueue,您可以在其中排队图像下载以在单独的线程上进行。

这是一个很好的例子:http://davidgolightly.blogspot.com/2009/02/asynchronous-image-caching-with-iphone.html

关于ios - 从 XML 提要中抓取图像的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9945025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com