3

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

似乎 IKImageBrowserView 喜欢预加载/预取图像缓存,作为低优先级的后台任务,尽可能多的不可见项目。这可能很有用,但如果我们能提供帮助,我们不想加载 CPU(以及用于远程检索图像的网络)。

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

有没有办法禁用这个预加载器的调度?(即使有一个我们现在可以小心翼翼地使用的未记录 API,我也会确保打开一个请求以将其变为公共 API,因为能够关闭这个危险的功能非常关键。)

这确实会影响很多应用程序。您可以建议的任何解决方法将不胜感激。

顺便说一句,一些相关的讨论: http: //lists.apple.com/archives/cocoa-dev/2007/Nov/msg02011.html

4

1 回答 1

4

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

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

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

于 2009-10-09T01:17:21.627 回答