2009-11-26 5 views
1

Je suis l'échantillon officiel d'AppleNSURLConnection fuite

http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

En examinant mon code avec des instruments que j'ai trouvé une fuite, causée par la non publié NSURLRequest. J'ai maintenant inclus un [request release] peu après

NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self];  

et il semble fonctionner. Ai-je raison?

Cordialement

Répondre

2

La demande est autoreleased ce qui signifie que la piscine autorelease devrait prendre soin de le libérer. Si vous l'utilisez dans une application Cocoa, vous devriez avoir une configuration automatique de pool de libération automatique qui gérera la libération des objets auto-libérés.

Si vous travaillez sur une application non-cacao, vous devrez le configurer vous-même et assurez-vous de libérer/vider la piscine afin de libérer vos objets.

En règle générale, vous devez uniquement libérer des objets créés avec alloc, copy, mutableCopy ou si vous l'avez envoyé retain. Cela signifie que vous devrez libérer l'objet de connexion que vous avez créé avec [[NSURLConnection alloc] init... sinon il y aura une fuite.

Voici le lien vers un document sur les Autorelease Pools

0

Ah, je vois. Pour certaines raisons, j'ai mélangé l'échantillon « officiel » avec ma propre réalisation :) Dans mon code, je faisais ceci:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL: url]; 

et cela a bien sûr d'être libéré. L'échantillon que j'ai mentionné ci-dessus se comporte différemment. Semblait être plutôt en retard la nuit dernière.

Cependant, merci beaucoup pour votre réponse.

Une chose me rend fou: je ne reçois pas une notification par e-mail, si quelqu'un répond à mes questions, même si j'ai mis le marqueur ...

Cordialement