2009-10-28 6 views
0

Je suis tombé sur la situation où ma classe effectue un appel Web asynchrone et l'utilisateur en demande un autre (en déplaçant une carte) et n'arrive pas à annuler correctement le NSURLConnection. J'ai vu quelques solutions pour gérer plusieurs appels asynchrones, mais je ne veux pas faire cela car une fois la deuxième requête faite, je ne me soucie plus de la première. Je vois qu'il y a une méthode d'annulation, mais j'ai essayé de l'appeler seulement quand la connexion est nulle, mais la connexion ne semble jamais devenir nulle malgré une version sur cet objet. Quelqu'un at-il un exemple de code d'une annulation correcte d'un NSURLConnect asynchrone?iphone Annuler NSURLConnection asynchrone

Répondre

3

Je ne pense pas que vous compreniez le passage ou le maintien/libération d'un message Objective C. L'envoi d'une conservation ou d'une libération à un objet ne fera jamais passer le pointeur que vous détenez pour cet objet (bien que l'objet ne soit plus valide). En d'autres termes:

id a = b; 
[a release]; 

//since release never changes the value of a 
assert(a == b); 

D'accord, donc avoir dit que, si en quelque sorte un code de libération changer la valeur du pointeur de l'objet que vous avez appelé contre à zéro, puis l'envoi d'un autre message à ce serait rien. Les messages à zéro sont silencieusement supprimés. Rappelez-vous, ce que vous détenez est un pointeur vers l'objet, pas l'objet lui-même. Cela dit, si vous voulez annuler une connexion NSURLConnection. Vous devez lui envoyer l'annulation avant de la libérer (en général, il n'est jamais correct d'envoyer un message aux objets après les avoir libérés).

Je vous recommande vraiment de lire la gestion de la mémoire d'Apple documentation.

Questions connexes