2012-12-05 6 views
5

Je me demande s'il est préférable d'utiliser une instance globale de NSCache, ou plusieurs instances pour chaque composant qui en a besoin. Par exemple, j'ai plusieurs sous-classes de vue qui dessinent le contenu en images et les mettent en cache pour éviter de les régénérer tout le temps. Vaut-il mieux avoir une instance de NSCache par classe, ou juste 1 NSCache centralisé pour toute l'application?Meilleure utilisation de NSCache dans une application

Notez que je ne veux pas dire un cache par instance d'un objet, il est retardé pour le faire. Je parle d'une instance de NSCache pour chaque classe.

Répondre

3

Cela dépend évidemment, mais je voterais généralement pour un cache pour chaque type d'objet mis en cache. De cette façon, vous pouvez avoir différentes valeurs countLimit pour chacun, par ex. pour spécifier des choses comme "conserver les 50 dernières vignettes rendues", "conserver les 5 plus grandes images téléchargées", "conserver les 10 derniers PDF téléchargés", etc.

Pour des tâches très coûteuses, j'emploie aussi la mise en cache à deux niveaux, NSCache pour des performances optimales, et l'enregistrement dans un répertoire temporaire/cache dans le système de fichiers local pour éviter des cycles de téléchargement coûteux sans consommer de RAM.

+0

J'aime l'idée d'avoir différentes règles de cache pour chaque objet. Et bon point pour avoir un objet centralisé pour gérer les caches. Enregistrer sur le disque est évidemment une bonne pratique. – Olivier

2

Si les éléments mis en cache peuvent être partagés entre les composants, vous pouvez tout aussi bien avoir un cache unifié: les recherches ne seront pas beaucoup plus coûteuses et vous aurez au moins une chance de réduire les copies redondantes de vos objets mis en cache.

Mais si les éléments mis en cache sont uniques par composant, les mélanger dans un cache est inutile et, du point de vue de la lisibilité du code, il risque d'être déroutant. Gardez les caches séparés, dans ce cas. Cela vous permet également de les contrôler plus précisément - par ex. vous pourriez expulser plus agressivement dans des caches des composants qui ne sont pas immédiatement utilisés.

+0

Voilà aussi comment je vois les choses. Je serais curieux d'avoir plus d'opinions sur ce sujet si. – Olivier

Questions connexes