2009-10-08 4 views
3

Pour notre réécriture du projet de framework iMedia open source (actuellement utilisé par des dizaines de développeurs), nous passons à IKImageBrowserView, et nous passons un temps troublant avec la mise en cache.Dire à IKImageBrowserView de ne pas planifier le préchargement

Il semble que IKImageBrowserView aime précharger/préextraire un cache d'images, en tant que tâche d'arrière-plan de faible priorité, autant d'éléments non encore visibles qu'il le peut. Cela peut être utile, sauf que nous ne voulons pas charger le processeur (et le réseau pour les images récupérées à distance) si nous pouvons l'aider.

D'autant plus que nous avons notre propre mécanisme de mise en cache FIFO (nous pouvons partager nos données de vignettes avec d'autres vues dans les mêmes données), tout ce qui est de remplir le cache jusqu'à sa capacité déversé. Y at-il un moyen de désactiver la planification de ce préchargement?

(Même s'il existe une API non documentée que nous pouvons utiliser avec précaution pour l'instant, je vais être sûr d'ouvrir une requête pour en faire une API publique, car il est vraiment essentiel de pouvoir désactiver cette fonctionnalité dangereuse.)

Cela affectera vraiment beaucoup d'applications. Toute solution de rechange que vous pourriez suggérer serait très appréciée.

BTW Des discussions connexes: http://lists.apple.com/archives/cocoa-dev/2007/Nov/msg02011.html

+0

Classé. S'il vous plaît dupe! http://www.openradar.appspot.com/radar?id=88402 – danwood

Répondre

4

J'ai commencer à utiliser IKImageBrowserView moi-même, et je ne l'avais pas remarqué avant, mais en effet je l'ai essayé et je vois le même comportement avec ma propre application .

Il semble qu'il existe une méthode privée sur IKImageBrowserView appelée _shouldProcessLongTasks. J'ai essayé de l'ignorer pour retourner NO, et cela semble empêcher le comportement de préchargement pour les images qui ne sont pas encore visibles dans la vue (au moins sous Snow Leopard, il faudrait tester sous Leopard pour voir si le comportement est le même) . Cela ressemble à une utilisation d'API privée à faible risque, car si la méthode change, elle ne sera plus appelée. Lorsque vous déposez un bug sur Apple, publiez le numéro du radar afin que les autres personnes concernées puissent y déposer une dupe et essayer d'obtenir une API publique et/ou un changement de comportement pour cela. Pour l'anecdote, il semblerait que le comportement actuel est de pré-charger les éléments en arrière-plan tant que l'application est au premier plan et que la fenêtre contenant la vue est la clé. Si vous passez à une autre application ou une autre fenêtre, le préchargement s'arrête.

Questions connexes