0

我正在开发一个执行图像延迟加载的项目。当 imagedownloader 下载图像时,它会将消息发送给它的代理来处理图像。但是,当它的委托(视图控制器)从内存中释放时,我不希望 imagedownloader 类将消息发送给它的委托,因为它已经死了。我需要知道什么时候可以将 imagedownloader 的委托设置为零?我的目标设置为 iOS4.0,所以我不能使用弱引用。我有许多存储在字典中的 imagedownloader 实例,准备向他们的代表发送完成消息。我必须将所有这些存储实例的委托设置为零。现在我正在做'

-(void)viewWillDisappear:(BOOL)animated
{
    for(imagedownloader *imagedownloaderObj in dict)
    {
        imagedownloaderObj.delegate = nil;
    }

    [super viewWillDisAppear:animated]
}

但它在循环中崩溃。请帮助任何人......对不起我的英语不好但我希望你明白这是我的问题..

4

1 回答 1

1

您的代码中有问题 - 您正在枚举一个字典,该字典枚举了它的键,而不是它的对象。相反,你想做:

for(ImageDownloader *imageDownloader in [imageDownloaderDictionary allValues])
{
    if (imageDownloader.delegate == self)
        imageDownloader.delegate = nil;
} //note - I've adjusted naming to match Objective-C style conventions. It fits in better with the framework code now.

另外,我会说改为这样做dealloc。我不知道viewWillDisappear:在释放之前你总是会得到一个方法,在早期版本的 iOS(包括 iOS4)上你当然不能保证。此外,如果您返回该视图,您也不想浪费时间再次下载图像。

于 2012-10-05T08:13:44.383 回答