我正在UITableView中从URL加载图像。但是加载视图时速度很慢。这是一个例子,
UIImage *image = nil;
image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://calcuttans.com/palki/wp-content/uploads/2009/02/kidscover-small.png"]]];
在表视图中,UIButton我正在设置背景图像。
请您提供样品。
仅供参考:我使用的是LazzyTable示例程序,但它没什么用处。你能建议任何其他样品。
答案 0 :(得分:17)
异步加载图片
NSURL* url = [NSURL URLWithString:@"http://calcuttans.com/palki/wp-content/uploads/2009/02/kidscover-small.png"];
NSURLRequest* request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse * response,
NSData * data,
NSError * error) {
if (!error){
NSImage* image = [[NSImage alloc] initWithData:data];
// do whatever you want with image
}
}];
答案 1 :(得分:3)
有一些开源库可用于此:
这些库以异步方式下载图像并将其缓存以供进一步使用。
答案 2 :(得分:2)
尝试实施AFNetworking。它使用异步请求来下载图像,您目前每次下载都会屏蔽您的视图。
然后,您可以使用AFImageRequestOperation下载图片。
答案 3 :(得分:2)
//利用调度队列加快数据处理速度。在viewDidLoad中添加它
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSData * data=[NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]];
[self performSelectorOnMainThread:@selector(setImage:) withObject:data waitUntilDone:YES];
});
//一旦数据被设置了图像并重新加载tableview
-(void)setImage:(NSData *)responseData
{
image = [UIImage imageWithData:responseData];
[tableView reloadData];
}
答案 4 :(得分:2)
如果您每次都从互联网上下载所有图片,那么它一定非常慢。
我认为您将下载图像存储到filePath,当您加载图像时,可以检查图像是否已经下载,如果没有,则下载。如果已下载,您可以使用imageWithContentsOfFile:
方法加载图像
答案 5 :(得分:1)
也许您可以使用asihttprequest来延迟加载图片。使用ASINetworkQueues
答案 6 :(得分:1)
您必须使用NSOperationQueue
来提高tableview
效率。
答案 7 :(得分:1)
看一下本教程。这对我帮助很大。当我使用它时,我对iOS一般都是新手,它不仅有助于从网上加载图像。
答案 8 :(得分:0)
使用AFNetworking
会更容易。
// AFNetworking
#import "UIImageView+AFNetworking.h"
[cell.iboImageView setImageWithURL:[NSURL URLWithString:server.imagen] placeholderImage:[UIImage imageNamed:@"qhacer_logo.png"]];