0

我有一个视图,它有一个 UITableView,我在其中延迟加载图像。我有一个名为 ThumbDownloader 的类,我在其中初始化一个 NSURLConnection 并在调用 connectionDidFinishLoading 时完成加载图像后,在 connectionDidFinishLoading 中,我将这样的调用返回到我的主视图:

[delegate appImageDidLoad:self.indexPathInTableView];

在我的主视图中,我有一个 ThumbDownloader 实例数组。该数组名为:imageDownloadsInProgress

问题是,如果我在所有图像下载完成之前进入视图并快速退出,我会得到僵尸:

 -[myApp appImageDidLoad:]: message sent to deallocated instance 0xa499030

我尝试了很多方法在 dealloc 等中释放 ThumbDownloader 实例,但似乎没有任何效果。

这是我设置实例并将其添加到数组的位置:

- (void)startIconDownload:(Product *)product forIndexPath:(NSIndexPath *)indexPath
{
    ThumbDownloader *thumbDownloader = [imageDownloadsInProgress objectForKey:indexPath];
    if (thumbDownloader == nil) 
    {
        thumbDownloader = [[ThumbDownloader alloc] init];
        thumbDownloader.product = product;
        thumbDownloader.imageSizeWidth = 87;
        thumbDownloader.imageSizeHeight = 87;
        thumbDownloader.indexPathInTableView = indexPath;
        thumbDownloader.delegate = self;
        [imageDownloadsInProgress setObject:thumbDownloader forKey:indexPath];
        [thumbDownloader startDownload];
        [thumbDownloader release];   
    }
}
4

2 回答 2

1

确保清除 NSURLConnection 上的委托。

于 2012-10-01T18:19:29.100 回答
0

只需添加

[connection cancel]

在 ThumbDownloader 类的 dealloc 方法中。这将取消正在进行的下载并阻止调用该消息。

于 2012-10-01T18:22:49.897 回答