2009-10-11 16 views
7

An welchem ​​Punkt muss ein NSUrConnection-Objekt korrekt freigegeben werden?Wann soll das NSUrConnection-Objekt freigegeben werden?

In meinem Programm, ich eine NSUrlConnection zuweisen, und dann initWithRequest, um asynchron zu starten.

Ich bin jetzt verantwortlich für die Freigabe des Objekts - wann kann/kann ich freigeben? Sofort, wenn ich es nicht wieder benutze?

+0

Ich überprüft Retaincount nach dem Erstellen meiner NSUrlConnection - es war 2. Ich fühle, dass es korrekt ist, sofort zu veröffentlichen. Will jemand dem widersprechen oder eine Antwort erstellen, die das sagt? – Alan

Antwort

7

Ihre Verwendung der NSUrlConnection kann sofort freigegeben werden.

Das Framework wird freigegeben, wenn es damit fertig ist.

+1

Ich denke, es ist keine gute Idee. Ich habe es mit meinem Code überprüft und dann stürzt es ab. Und Apple Sample Code hat es auch nicht freigegeben. Sie geben es in dem Delegat-Aufruf z.B. didFinishLoading ... – karim

10

Wenn Sie mit der NSURLConnection fertig sind. Sie werden wissen, dass Sie damit fertig sind, wenn Ihr NSURLConnection Delegierter - (void)connectionDidFinishLoading:(NSURLConnection *)connection oder - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error erhält. Gib es einfach am Ende dieser beiden Methoden frei.

+0

Das führt dazu, dass meine Anwendung mit BAD_ACCESS abstürzt. Ich glaube, du kannst es sofort veröffentlichen, wie @Alan sagt. – Nathan

1

Sie müssen es nicht freigeben, bis das Framework eine Benachrichtigung ausgibt, dass es fertig ist, z. B. in connection:didFailWithError:.

1

Dies ist ein bisschen spät (Ihre Frage wurde im Jahr 2009 veröffentlicht, vor mehr als einem Jahr), aber ich hatte einige Probleme mit meinem NSUrlConnection-Code. NSUrlConnection stürzte ständig ab und ich dachte der Absturz war mit meiner Veröffentlichung von NSUrlConnection [theConnection release]; verbunden. Ich schrieb meinen Code wie in Apples Beispiel here, aber ich beendete die Verbindung, nachdem sie in "Listing 1" erstellt wurde, anstatt sie dort zu veröffentlichen, wo Apple sowohl didFailWithError als auch connectionDidFinishLoading tut, und es scheint gut zu funktionieren. Ich bin mir nicht ganz sicher, aber vielleicht wurden beide Delegierten angerufen, und eine Doppelfreigabe war der Grund für den Absturz. Ich war mir nicht sicher, ob ich mein NSUrlConnection-Objekt direkt nach der Erstellung freigeben konnte, bis ich diese Frage gelesen hatte, aber das schien den Trick zu machen.

Verwandte Themen