1
我有一個集合視圖,需要顯示其文件保存在設備上的圖像集合。它們都是600x600像素,所以我認爲最好在後臺線程上異步創建UIImage,然後在主線程上設置我的UIImageView
的image
屬性。下面是我在一段時間image
做到這一點凡在我(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
方法UICollectionViewCell使用GCD從設備加載異步圖像
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;
每隔一段時間就會nil
的細胞之一。它不可重現,並不總是相同的單元/圖像名稱。我想知道這與使用UIImage imageNamed:
方法有什麼關係,或者我錯誤地使用了GCD?任何關於這個問題的想法將不勝感激。
使用imageNamed意味着圖像隨您的應用程序的包。直接加載這些應該有非常低的延遲(甚至在第一次加載之後更低,因爲它們將被UIImage緩存)。您可以/也應該考慮運送較小版本的圖像,並針對該設備進行優化。跳過gcd代碼,只需調用imageNamed: – danh