使用GCD从设备加载UICollectionViewCell异步图像,

时间:2017-07-15 06:37:00

标签: ios objective-c

我有一个集合视图,需要显示其文件保存在设备上的图像集合。它们都是600x600像素,所以我认为最好在后台线程上异步创建UIImage,然后在主线程上设置image的{​​{1}}属性。以下是我在UIImageView方法

中执行此操作的位置
(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

对于其中一个单元格,dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ NSString *imageName = [NSString stringWithFormat:@"wo-%@", template.fileName]; UIImage *image = [UIImage imageNamed:imageName]; dispatch_async(dispatch_get_main_queue(), ^{ if (image == nil) { self.collectionView.backgroundColor = [UIColor redColor]; NSLog(@"image named: %@ in nil!", imageName); } cell.imageView.image = image; }); }); return cell; 偶尔会image。它不可重复,并且它不总是相同的单元/图像名称。我想知道这与使用nil方法有什么关系,还是我错误地使用GCD?对此问题的任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

为了异步加载图像,“SDWebImage”可能是最佳解决方案。

SDWebImage

只需在你的cellForItemAtIndexPath中调用以下方法:

[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.example.com/path/to/image.jpg"]
         placeholderImage:[UIImage imageNamed:@"placeholder.png"]];