Oui, vous devez libérer cet objet. Voir le Memory Management Programming Guide for Cocoa. Fondamentalement, si vous créez un objet avec un nom de méthode qui commence par alloc
ou new
ou contient copy
, vous devenez propriétaire de l'objet et vous devez le libérer plus tard. Seulement dans le cas où vous savez que vous aurez besoin de l'objet jusqu'à la fin du programme, il est autorisé de ne pas le libérer, auquel cas le système d'exploitation récupère la mémoire lorsque votre application se termine.
Si vous avez seulement besoin de l'objet dans un petit cadre, vous pouvez lui envoyer le message autorelease
. Cela l'ajoutera au pool autorelease. Le pool autorelease envoie périodiquement un message release
à chaque objet qui s'y trouve. C'est un peu compliqué; Voir la section sur autorelease pools. Par exemple:
Dans ce cas, cependant, étant donné que NSURLConnection
s sont asynchrones, la libération automatique ne fonctionnera pas. Vous ne savez pas exactement quand il va rappeler dans votre objet avec des données, donc vous voulez vous assurer que l'objet n'a pas encore été libéré. La seule façon d'être sûr est de savoir exactement quand vous avez terminé avec l'objet, puis de lui envoyer un message release
vous-même.
Toutes les différentes init*
fonctions renvoient un pointeur sur l'objet donné, vous pouvez juste faire:
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
...
// when done with connection:
[connection release];
C'est ce que je pensais. Je suis confus comment le libérer car il n'a pas de nom? – Greg