在我的应用程序中,我正在异步加载UITableViewCells的图像:
-(void) loadImage:(NSString *)urlString cell:(UITableViewCell *)cell {
UIImageView *iv = cell.imageView;
UIImage *image = [imageCache objectForKey:urlString];
if(!image) {
NSURL *url = [NSURL URLWithString:urlString];
image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];
if(image) {
[imageCache setObject:image forKey:urlString];
}
}
dispatch_async(dispatch_get_main_queue(), ^{
iv.image = image;
[cell addSubview:iv];
});
}
在所有图像加载完成之前刷新tableview时,iv.image = image;
会抛出异常,因为iv已被解除分配。确保我从不尝试为解除分配的单元格设置图像的最佳方法是什么?有没有办法在重新加载tableview时终止任何延迟的异步加载?
答案 0 :(得分:1)
我会以相反的方式实现。在构建单元格时尝试从缓存中获取图像。如果未找到图像,则触发异步下载并通知单元或控制器(从主线程)下载图像。您可以使用KVO将单元格与图像缓存连接。