Question

* NSURLConnection connexion est une propriété de la classe

@property (nonatomic, retain) NSURLConnection *connection;

Instruments rapporte que je suis un objet qui fuit NSURLConnection dans la deuxième ligne du code ci-dessous.

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:_url];
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[request release];

Dans les sélecteurs de délégués didFinishLoading et didFinishWithError, je libérer la connexion et la mise à zéro

[self.connection release];
self.connection = nil;

J'ai lu « fuite NSURLConnection? » après et plusieurs autres. Je sens que je dois manquer quelque chose tout à fait évident. Aide?

Était-ce utile?

La solution

Comme le commentaire de chevreuil dit, vous allouez la connexion (conserver le nombre 1), puis le conserver à nouveau avec votre propriété de connexion (conserver le nombre 2). Vous dégagez une seule fois dans les sélecteurs de délégués. Vous avez deux options:

1) Modifiez votre propriété de connexion à attribuer plutôt que de conserver.

@property (nonatomic, assign) NSURLConnection *connection;

// OR, since assign is the default you may omit it

@property (nonatomic) NSURLConnection *connection;

2) Libérer l'objet attribué après qu'il est retenu par votre propriété de connexion:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:_url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
self.connection = connection;
[connection release];
[request release];

L'option 2 est préférable car il y a moins d'une chance de fuites depuis alloc et la libération sont aussi proches que possible. De plus, si vous oubliez de libérer la connexion précédente les méthodes de synthèse libéreront précédent pour vous. Ne pas oublier de libérer self.connection dans dealloc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top