objective-c - 代表没有得到零

标签 objective-c ios delegation

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

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

    [super viewWillDisAppear:animated]
}

但它在循环中崩溃了。请帮助任何人...很抱歉我的英语不好,但我希望你明白我的问题是什么..

最佳答案

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

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)上你当然不能保证这一点。此外,如果您返回该 View ,您不想浪费时间再次下载图像。

关于objective-c - 代表没有得到零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12742039/

相关文章:

libupnp 下的 ios 多线程套接字卡在 send() 上

iOS6 没有libxml2.2.7.3.dylib。有替代品吗?

ios - 我需要了解为什么 Objective-C 中的委托(delegate)如此重要,是什么让它如此特别?

ios - 自定义 AppDelegate,添加 ViewController 属性,然后设置该属性 : unrecognized selector sent to instance 0x16574320

Objective-C - 如何使用 NSInteger 初始化枚举?

objective-c - 在 NSOutlineView 中为 "sliding"设置动画

objective-c - 即使在使用时,编辑模式单元格中的 UITableView 仍然可选择

ios - 将 OpenGLES 着色器作为 iOS API 的一部分进行处理的最佳方式是什么?

Javascript 委托(delegate)性能注意事项

ios - 使用非表格 View 主机类中的 NSNotification 更改自定义表格 View 单元格按钮背景图像