0

我正在从 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 示例程序,但它没有多大帮助。你能推荐任何其他样品吗?

4

9 回答 9

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
    }

}];
于 2013-01-29T09:10:01.323 回答
3

有一些可用的开源库:

  1. HJCache
  2. SDWebImage

这些库以异步方式下载图像并将其缓存以供进一步使用。

于 2013-01-29T09:13:43.600 回答
2

尝试实现AFNetworking。它使用异步请求来下载图像,您当前在每次下载时都会阻止您的视图。

然后,您可以使用AFImageRequestOperation下载您的图像。

于 2013-01-29T09:07:57.827 回答
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];
}
于 2013-01-29T09:09:26.680 回答
2

如果您每次都加载从互联网下载的图像,它一定很慢。

我认为您应该将下载的图像存在于 filePath 中,当您加载图像时,您可以检查该图像之前是否已下载,如果没有,则下载。如果已经下载,可以使用imageWithContentsOfFile:加载图片的方法

于 2013-01-29T09:11:29.490 回答
1

也许您可以使用asihttprequest来延迟加载图像。使用 ASINetworkQueues

于 2013-01-29T09:08:59.693 回答
1

你必须用它NSOperationQueue来提高你的tableview效率。

检查这个icodeblog 教程raywenderlich 教程

于 2013-01-29T09:09:01.560 回答
1

看看这个教程。这对我帮助很大。当我使用它时,我对 iOS 还是很陌生,它不仅对从网络加载图像很有帮助。

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

于 2013-01-29T09:11:28.780 回答
0

有了AFNetworking它就更容易了。

//AF网络

#import "UIImageView+AFNetworking.h"

[cell.iboImageView setImageWithURL:[NSURL URLWithString:server.imagen] placeholderImage:[UIImage imageNamed:@"qhacer_logo.png"]];
于 2015-01-08T00:22:47.043 回答