0

在我的应用程序中,我正在异步加载 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 时,是否有某种方法可以杀死任何挥之不去的异步加载?

4

1 回答 1

1

我会以另一种方式实施。在构建单元格时尝试从缓存中获取图像。如果未找到图像,则触发异步下载并通知单元或控制器(来自主线程)该图像已下载。您可以使用 KVO 将单元格与图像缓存连接起来。

于 2012-10-09T19:29:26.740 回答