在UITableView中从networking加载图像的更有效的方法是什么?

对于我的UITableView每个UITableViewCell ,我在后台线程中从网上下载一个图像。 然后我使用主线程更新单元格中的imageView。

 dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ //Background Thread // download the image in separate thread UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString: @"someurl.com" ] ] ]; dispatch_async(dispatch_get_main_queue(), ^(void){ // this is called in the main thread after the download has finished, here u update the cell's imageView with the new image cell.eventImageView.image = image; }); }); 

滚动时,我没有注意到任何滞后。

但是,我想知道是否有更好的方法,如果有,我该怎么办?

谢谢

我更喜欢使用SDWebImage( 可以在这里findGit )

我写了一些类似于你的页面,它涉及非常简单的代码:

  // Set and load the images [cell.menuImageView sd_setImageWithURL:url placeholderImage:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { // Get rid of the activity indicator when the image has been loaded [activity stopAnimating]; }]; 

在我看来,有一些好处:

1)图书馆是灵活的,并给你很多select你想要下载图像(这些只是less数)

例如:

 - (void)sd_setImageWithURL:(NSURL *)url - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options - (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock 

2)图书馆caching的图像意味着下一次你不必再下载它们。

3)图书馆得到很好的支持,帮助解决问题

我个人开始使用你使用的技术,发现有限制和困难(添加活动指标,如果图像缓慢下载等),然后试用了一些不同的asynchronous图像下载器,这一出来是最好的

希望能帮助到你