Mise en cache sur AFNetworking 2.0

Alors, voici l'affaire. J'ai récemment commencé à utiliser AFNetworking pour download quelques files au démarrage en utilisant le code suivant:

NSMutableURLRequest* rq = [api requestWithMethod:@"GET" path:@"YOUR/URL/TO/FILE" parameters:nil]; AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:rq] autorelease]; NSSsortingng* path=[@"/PATH/TO/APP" ssortingngByAppendingPathComponent: imageNameToDisk]; operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"SUCCCESSFULL IMG RETRIEVE to %@!",path) } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // Deal with failure }]; 

Avec mon path effectivement branché dans la variable de path (Désolé, pas sur le bon ordinateur en ce moment pour copyr réellement les pâtes du text, mais c'est exactement la même chose que ci-dessus avec des trucs de paths différents)

Et tout fonctionne bien! Je reçois le file téléchargé avec succès et tout. Mon problème actuel est que j'essaie de faire fonctionner la memory cache, mais j'ai beaucoup de difficultés. Fondamentalement, je ne suis pas sûr de ce que je dois réellement faire côté client à partir de AFNetworking 2.0. Dois-je encore configurer le NSURlCache? Dois-je définir différemment l'en-tête du type de caching sur l'opération de request? Je pensais que c'était peut-être juste entièrement embedded, mais je reçois un statut de 200 chaque fois que le code s'exécute, même sans aucun changement dans le file. Si je dois utiliser NSUrlCache, est-ce que je dois sauvegarder manuellement l'label électronique sur l'opération de request de blocs de succès et la réinjecter ensuite? Toute aide sur la façon de progresser serait très appréciée. Merci les gars!

AFNetworking utilise NSURLCache pour la caching par défaut. De la FAQ :

AFNetworking tire parti de la fonctionnalité de caching déjà fournie par NSURLCache et l'une de ses sous-classs. Tant que vos objects NSURLRequest ont la bonne politique de cache et que votre réponse du server contient un en Cache-Control tête Cache-Control valide, les réponses seront automatiquement mises en cache pour les requests suivantes.

Notez que ce mécanisme met en cache NSData , donc chaque fois que vous récupérez de ce cache, vous devez effectuer une NSData NSData- UIImage UIImage assez coûteuse. Ce n'est pas assez performant pour un affichage rapide, par exemple si vous affichez des images dans un UITableView ou UICollectionView .

Si c'est le cas, regardez UIImageView+AFNetworking , qui ajoute les téléchargements et la caching des objects UIImageView à UIImageView . Pour certaines applications, vous pouvez simplement utiliser l'implémentation prête à l'emploi, mais elle est très basique. Vous pouvez regarder le code source de cette class (ce n'est pas très long) et l'utiliser comme sharepoint départ pour votre propre mécanisme de caching.