Frage

ich eine Klasse, die einen Antrag auf ein paar übergebenen Variablen basiert aufbaut. Die Klasse hat auch alle die Delegatmethoden die Daten und speichert sie in einer Eigenschaft für die anrufende Klasse erhalten abgerufen werden.

Wenn die Klasse initialisiert sie erstellt eine Verbindung und kehrt dann selbst:

NSURLConnection *connection;
if (self = [super init]) {
    self.delegate = theDelegate;
    ...some code here...
    connection = [[NSURLConnection alloc] initWithRequest:theRequest  delegate:self  startImmediately:YES];
}
return self;

So kann ich es normalerweise nicht freigeben und wenn ich Autorelease stürzt. Ist es die Aufgabe der anrufenden Klasse zu veröffentlichen? Und wenn ja nicht nur das initilised Objekt Freigabe auch Release-Verbindung oder haben Sie es speziell veröffentlichen? Wenn ja, wie würden Sie?

Danke

War es hilfreich?

Lösung

Make connection eine Instanzvariable und geben sie bei Bedarf. Die Frage „wer“ das Objekt freigeben sollte, hängt streng auf Ihrem Objekt Semantik und Hierarchie.

Andere Tipps

Warum öffnen Sie ein NSURLConnection in einem Konstruktor?

Normalerweise Konstruktor sollte diese Art von Arbeit nicht ausführen. Wenn die Verbindung mit dem Objekt verbunden ist, würde ich connection eine Eigenschaft des Objekts und [connection release]; innerhalb des Objekts dealloc Methode machen.

Beachten Sie, dass Sie nicht alle den Glauben an Clang platzieren sollte. Es kann und wird Bericht falsch-negative und falsch positive Ergebnisse.

Clang wird immer besser jeden Tag, aber es immer noch in den Kinderschuhen steckt jetzt. Es ist toll, dass es mit Xcode integriert ist so schön, aber nur im Kopf behalten, dass es einige Mängel hat.

In diesem Fall kommt es auf dem Umfang der Variablen, die Sie in das Verbindungsobjekt sind zu speichern. Wenn es als Instanz Variable deklariert ist, dann sollte es in Ordnung sein, so lange wie Sie es in dealloc veröffentlichen oder zu einem anderen Punkt, wenn Sie mit ihm fertig.

Wenn Sie, wie Sie in Ihrer Frage gepostet haben, die Deklaration von connection auf Ihre init-Methode lokal ist, dann wird Clang Berichterstattung korrekt ein Leck. Sie sollten connection eine Instanz Variable oder Eigenschaft machen und sicherzustellen, dass Sie es in dealloc freigeben oder wenn Sie mit ihm fertig sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top