如何确保实例未被释放?

时间:2012-10-09 19:20:54

标签: ios uitableview asynchronous synchronization exc-bad-access

在我的应用程序中,我正在异步加载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时终止任何延迟的异步加载?

1 个答案:

答案 0 :(得分:1)

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

相关问题