2010-09-19 8 views
4

J'ai une application iPhone assez intensive en images, et je cherche à stocker des images téléchargées à distance localement dans le répertoire sandbox tmp de l'application pour éviter les requêtes réseau inutiles. La taille totale des fichiers stockés dans les répertoires d'une application est-elle limitée ou l'application doit-elle gérer cela? Comment l'application déterminerait-elle la taille des fichiers dans le répertoire tmp?Gestion de l'application iPhone sandbox tmp taille de répertoire pour la mise en cache des images

De plus, si l'application doit gérer la taille du cache, j'aimerais mettre en place une sorte de politique de cache pour déterminer quels fichiers seront invalidés. Comment ferais-je cela? Si je veux implémenter une politique de mise en cache LRU de base - invalider les fichiers qui ont été utilisés moins récemment - il me semble que je devrais stocker le nombre d'accès pour chaque image et stocker cela sur le disque, ce qui semble plutôt funky. Je suppose qu'une politique de gestion de la taille facile serait simplement effacer complètement le cache chaque fois que l'application se termine.

En outre, quelle est la différence entre l'utilisation du répertoire NSCachesDirectory et NSTemporaryDirectory? Les docs Apple mentionnent les deux, mais ne parlez pas de celui à utiliser pour quel type de fichiers. Je pense que NSTemporaryDirectory ressemble plus à un répertoire Unix/var/tmp et est utilisé pour des données éphémères qui peuvent être effacées à tout moment. Il me semble que NSCachesDirectory est plus approprié pour stocker des images mises en cache, car les fichiers pourraient être nécessaires pour plusieurs cycles de vie d'application.

+0

Existe-t-il une raison pour laquelle NSURLCache ne correspond pas à la facture? Je suis moi-même confronté à des problèmes de mise en cache d'image et j'aimerais savoir à quel point NSURLCache est utile en tant que solution qui ne nécessite pas une base de données personnalisée LRU ou LRU-ish complète – Yetanotherjosh

Répondre

2

Tous les répertoires temporaires sont locaux pour votre application; n'importe lequel d'entre eux fonctionnera et il n'y a aucune limite artificielle à la taille de leur contenu. Une politique de cache LRU persistante devrait être à la fois suffisante et relativement facile à implémenter.

+0

Voilà ce que je vais faire. Pour ceux qui sont curieux - je profite également de l'attribut NSFileModificationDate pour chaque fichier pour appliquer la mise en cache LRU. – pmc255

+0

'NSFileModificationDate' effectue un suivi lorsque le fichier est modifié plutôt que lors de sa dernière utilisation. Normalement, on utilise 'stat' et le champ' st_atime' pour vérifier quand un fichier a été accédé pour la dernière fois, mais l'iPhone monte la partition utilisateur avec le paramètre 'noatime', donc il n'y a pas de moyen intégré pour suivre ces informations. Lancez votre propre :) – rpetrich