我为 iPhone 应用程序的UIImageView类设置了一个 Objective-C 类别。该类别的任务是帮助通过内存/磁盘缓存异步加载基于 URL 的图像。
现在,在 UIImageView+Cache.m 中,我可以访问NSOperationQueue,以便启动加载线程。我创建了一个NSOperation派生对象,使用图像 URL 和目标 UIImageView 进行了初始化,并在操作完成后在目标上执行了一个选择器。在 selector 方法中,我们设置了新加载的图像(或者,如果没有找到,我们设置一个替代的占位符图像),我们就完成了!
这工作正常,直到 UIImageView在 NSOperation 完成之前被删除。例如,我的 UI 中有一个上一个/下一个分段控件,它会导致这些 UIImageViews 被删除并重新添加(它们是在应用程序中查看的更大“项目”的一部分),因此很容易点击这些快速连续。
因此,如果您决定在所有图像加载之前开始敲击 - KABLAM!不开心的线程有一个无效的对象并且不知道它。:(
我能找到的最有助于缓解这种情况的方法是 NSOperation 的cancel和isCancelled方法,但您无法跟踪类别中要取消的操作对象,因为 - 如果我理解正确 - 类别无法将 IVAR 添加到对象!
也许这意味着类别在这里不是一个好主意?(呜咽:“但我喜欢分类!哇!”)
建议赞赏!