Malgré la documentation d'Apple indicating otherwise, NSURLCache
sur iOS ne fait aucune mise en cache de disque (flash). Vous pouvez sous-classer NSURLCache
pour changer le comportement des opérations d'extraction et de stockage pour utiliser le disque (comme le fait SDURLCache
), mais en raison des limitations sévères suivantes de la façon dont le cache est utilisé et implémenté, cela ne fonctionne pas aussi bien que vous d attendre:NSURLConnection sur iOS n'essaie pas de mettre en cache des objets supérieurs à 50 Ko
NSURLConnection
ne remet même passtoreCachedResponse:forRequest:
pour les fichiers sur environ 50 Ko (> = 52428 octets, pour être exact). Cela rend le sous-classementNSURLCache
inutile pour notre utilisation (images de 200 Ko), car il ne sera même pas dans le cache. Par conséquent, nous devons ajouter manuellement la mise en cache à un niveau supérieur àNSURLConnection
.- Même lorsque l'on appelle manuellement le
storeCachedResponse:forRequest:
intégré de NSURLCache, il ne stocke la réponse en mémoire que si elle est inférieure à environ 180 Ko. J'ai testé cela en appelant storeCachedResponse manuellement et en voyant que lecurrentMemoryUsage
avant/après n'a pas changé pour les longueurs de données supérieures à environ 180KB. Nous devons donc écrire notre propre mémoire cache LRU.
Quelqu'un d'autre a-t-il remarqué ces problèmes? Ou y a-t-il quelque chose qui me manque?
Pour votre information, je suis en cours d'exécution iOS 4.3 dans le simulateur et sur un iPad 2.
ASIHTTP n'est plus supporté –