90 votes

Est-il possible d'empêcher un NSURLRequest de mettre en cache des données ou de supprimer des données en cache suite à une requête?

Sur l'iPhone, j'ai effectuer une requête HTTP à l'aide de NSURLRequest pour un bloc de données. Objet de l'allocation de pointes et j'ai céder les données en conséquence. Quand j'ai fini avec les données, je suis libre jusqu'en conséquence -, mais les instruments ne pas afficher les données ont été libérés!

Ma théorie est que, par défaut, les requêtes HTTP sont mis en cache, mais je ne veux pas que mon application iPhone pour mettre en cache des données.

Est-il un moyen d'effacer ce cache, après une demande ou d'empêcher toutes les données mises en cache en premier lieu?

J'ai essayé d'utiliser toutes les règles de cache documenté un peu comme ci-dessous:

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
theRequest.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

mais rien ne semble pour libérer de la mémoire!

Toute aide serait appréciée.

Merci! Nick.

159voto

tcurdt Points 4916

Généralement, il est plus facile de créer une requête comme celle-ci

 NSURLRequest *request = [NSURLRequest requestWithURL:url
      cachePolicy:NSURLRequestReloadIgnoringCacheData
      timeoutInterval:60.0];
 

Puis créez la connexion

 NSURLConnection *conn = [NSURLConnection connectionWithRequest:request
       delegate:self];
 

et implémentez la méthode de connexion: willCacheResponse: sur le délégué. Revenir à zéro devrait le faire.

 - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse {
  return nil;
}
 

10voto

catlan Points 9896

Si vous utilisez NSURLConnection, examinez le délégué:

 - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
 

Valeur de retour

La réponse mise en cache à stocker dans le cache. Le délégué peut renvoyer cachedResponse sans modification, renvoyer une réponse en cache modifiée ou renvoyer nil si aucune réponse en cache ne doit être stockée pour la connexion.

7voto

Sanjeev Rao Points 895

Si ce n'est pas spécifique à une seule requête (vous voulez désactiver le cache pour toute l'application), une seule option est la meilleure. Ajouter ce code dans le délégué de l'application ou en fonction de vos besoins.

         int cacheSizeMemory = 0*4*1024*1024; // 0MB
        int cacheSizeDisk = 0*32*1024*1024; // 0MB
        NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
        [NSURLCache setSharedURLCache:sharedCache];
 

-1voto

PostCodeism Points 404

Si quelqu'un a essayé les réponses ci-dessus concernant NSURLRequestReloadIgnoringCacheData et la méthode willCacheResponse, essayez de supprimer la vue Web de la vue d'ensemble dans didReceiveMemoryWarning. Exemple:

 -(void)didReceiveMemoryWarning 
{
  [super didReceiveMemoryWarning];
  [self.mainWebView removeFromSuperview];
  [self removeOutlets];
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X