在UITAbleView中缓慢加载URL中的图像。

时间:2013-01-29 09:01:45

标签: ios objective-c uitableview

我正在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示例程序,但它没什么用处。你能建议任何其他样品。

9 个答案:

答案 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)

有一些开源库可用于此:

  1. HJCache
  2. SDWebImage
  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效率。

检查此icodeblog tutorialraywenderlich tutorial

答案 7 :(得分:1)

看一下本教程。这对我帮助很大。当我使用它时,我对iOS一般都是新手,它不仅有助于从网上加载图像。

http://www.markj.net/iphone-asynchronous-table-image/

答案 8 :(得分:0)

使用AFNetworking会更容易。

// AFNetworking

#import "UIImageView+AFNetworking.h"

[cell.iboImageView setImageWithURL:[NSURL URLWithString:server.imagen] placeholderImage:[UIImage imageNamed:@"qhacer_logo.png"]];