告诉IKImageBrowserView不要安排预加载

时间:2009-10-08 20:57:19

标签: cocoa imagekit ikimagebrowserview

对于我们重写开源iMedia框架项目(目前由数十名开发人员使用),我们正在切换到IKImageBrowserView,并且在缓存方面遇到了麻烦。

看起来IKImageBrowserView喜欢预加载/预取图像缓存,作为低优先级后台任务,就像许多尚未可见的项目一样。这可能很有用,除非我们不想加载CPU(以及远程检索图像的网络),如果我们可以提供帮助的话。

特别是因为我们有自己的FIFO缓存机制(所以我们可以将我们的缩略图数据与其他视图共享到相同的数据中),所有这一切都是将缓存填满容量,然后导致旧项目被转储

有没有办法禁用此预加载器的调度? (即使有一个我们现在可以小心使用的未记录的API,我也一定会打开一个请求,将它变成一个公共API,因为能够关闭这个危险的能力真的很关键。)

这确实会影响很多应用程序。你可以建议的任何解决方法都会非常感激。

BTW一些​​相关的讨论: http://lists.apple.com/archives/cocoa-dev/2007/Nov/msg02011.html

1 个答案:

答案 0 :(得分:4)

我自己开始使用IKImageBrowserView,之前我没有注意到这一点,但事实上我已经尝试过了,并且看到了与我自己的应用程序相同的行为。

看起来IKImageBrowserView上有一个名为_shouldProcessLongTasks的私有方法。我尝试重写它只返回NO,这似乎阻止了视图中尚未显示的图像的预加载行为(至少在Snow Leopard下,必须在Leopard下测试以查看行为是否相同) 。似乎是一个风险相当低的私有API使用,因为如果方法发生变化,它就不再被调用了。当您向此提交有关Apple的错误时,请发布雷达编号,以便受影响的其他人可以在其上提交欺骗并尝试获取公共API和/或行为更改。

对于记录,看起来当前的行为是,只要应用程序在前台并且包含视图的窗口是关键的,它就会在后台预取东西。如果你切换到另一个应用程序或窗口,它会停止预加载。