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 に答える