【问题标题】:Telling IKImageBrowserView not to schedule preloading告诉 IKImageBrowserView 不要安排预加载
【发布时间】:2010-12-05 03:43:00
【问题描述】:

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

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

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

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

这确实会影响很多应用程序。非常感谢您提出的任何解决方法。

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

【问题讨论】:

标签: cocoa imagekit ikimagebrowserview


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 2012-05-17
    • 2014-03-05
    相关资源
    最近更新 更多