2009-10-11 7 views
7

Quel est le bon point pour libérer un objet NSUrlConnection?Quand libérer l'objet NSUrlConnection

Dans mon programme, j'attribue un NSUrlConnection, puis initWithRequest pour démarrer de manière asynchrone.

Je suis maintenant responsable de la libération de l'objet - quand dois-je/je peux libérer? Immédiatement si je ne l'utilise plus?

+0

J'ai vérifié retaincount après avoir créé mon NSUrlConnection - il était 2. Je pense qu'il est correct de libérer immédiatement. Quelqu'un veut-il contredire cela, ou créer une réponse qui dit cela? – Alan

Répondre

7

Votre utilisation de NSUrlConnection peut être libérée immédiatement.

La structure sortira quand elle aura fini.

+1

Je pense que ce n'est pas une bonne idée. J'ai vérifié avec mon code, puis il y a eu un crash. Et le code d'échantillon de pomme n'a pas libéré non plus. Ils le libèrent dans l'appel de délégué, par ex. didFinishLoading ... – karim

10

Lorsque vous avez terminé le NSURLConnection. Vous saurez que vous en avez terminé lorsque votre délégué NSURLConnection reçoit - (void)connectionDidFinishLoading:(NSURLConnection *)connection ou - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error. Il suffit de le libérer à la fin de ces deux méthodes.

+0

Cela provoque le blocage de mon application avec BAD_ACCESS. Je crois que vous pouvez le publier immédiatement comme le dit @Alan. – Nathan

1

Vous n'avez pas besoin de le libérer tant que le cadre ne vous a pas notifié qu'il l'a fait, par exemple connection:didFailWithError:.

1

C'est un peu en retard (votre question a été postée en 2009, il y a plus d'un an) mais j'avais quelques problèmes avec mon code NSUrlConnection. NSUrlConnection a continué de planter et je pensais que le crash était lié à ma sortie de NSUrlConnection [theConnection release];. J'écrivais mon code comme dans l'exemple d'Apple here, mais j'ai fini par libérer la connexion après qu'elle ait été créée dans "Listing 1" plutôt que de la relâcher là où Apple fait à la fois didFailWithError et connectionDidFinishLoading et cela semble fonctionner correctement. Je ne suis pas tout à fait sûr, mais peut-être ces deux délégués ont été appelés et une double libération était ce qui causait l'accident. Je n'étais pas sûr de pouvoir libérer mon objet NSUrlConnection juste après sa création jusqu'à ce que je lise cette question, mais cela semblait faire l'affaire.

Questions connexes