web-dev-qa-db-fra.com

Avertissement Xcode 4 «Résultat d'expression inutilisé» pour NSURLConnection

J'essaie juste de faire mon transfert de données habituel. Je définis ma NSMutableURLRequest puis j'appelle

[[NSURLConnection alloc] initWithRequest:request delegate:self];

Cela était correct avec Xcode 3 mais Xcode 4 m'avertit de "Résultat d'expression inutilisé" sur cette ligne. La demande fonctionne mais j'aimerais trouver un moyen de me débarrasser de l'avertissement.

Je suppose que je pourrais stocker la connexion dans une variable mais je n'en ai pas vraiment besoin et je ne vois pas l'intérêt de la définir sur nil la ligne suivante (bien que cela supprimerait l'avertissement)

Remarque: je ne suis pas sûr à 100% s'il s'agit de Xcode 4 ou du fait que l'ARC est activé.

71
Johann

Lorsqu'une fonction renvoie un résultat dont vous n'avez pas besoin, vous pouvez le convertir en void pour éliminer l'avertissement du compilateur:

(void) [[NSURLConnection alloc] initWithRequest:request delegate:self];

Je n'ai pas encore utilisé ARC, donc je ne peux pas dire si c'est une bonne idée, avant ARC, vous devrez conserver ce résultat de pointeur quelque part afin de pouvoir le libérer.

181
progrmr

la réponse de progrmr est correcte, mais voici une façon encore plus propre de le faire:

[NSURLConnection connectionWithRequest:request delegate:self];

Cela ne provoque pas d'avertissement, même si vous ne transformez pas le résultat en annulation.

33
Elliot

Quelqu'un devrait être responsable de cela NSURLConnection. Il n'est pas nécessaire de stocker la connexion, mais il vaut mieux coder si vous le faites. Le problème est qu'après avoir créé notre NSURLConnection personne n'a de pointeur sur cette instance créée, ce qui ne devrait pas être le cas.

Supposons l'exemple suivant:

  1. votre instance de ClassA crée un instane de NSURLConnection
  2. votre instance de ClassA est libérée et désallouée
  3. NSURLConnection est toujours en vie et enverra le délégué à votre instance désallouée.

Pour résoudre ce problème, vous devez stocker l'instance de NSURLConnection et libérer cette connexion si votre instance de ClassA est désallouée, ce qui entraîne également la désallocation de l'instance de NSURLConnection.

3
thomas