2010-11-29 1 views
0

Führt die folgende Zeile dieses Objekt aus [[NSMutableDictionary alloc] init]?Führt das Hinzufügen eines nicht referenzierten Zuordnungsobjekts zur Auflistung zu einem Leck?

[myCollection setObject:[[NSMutableDictionary alloc] init] forKey:@"myDictionary"];

Ich gehe davon aus es nicht, weil das Objekt nie zu einer Referenz zugeordnet ist ... aber zugleich ich es in Frage, weil ich das Objekt habe Alloc ...

Würde des Nacharbeit als Alternative?

[myCollection setObject:[NSMutableDictionary dictionary] forKey:@"myDictionary"];

Antwort

2

Die erste wird auslaufen, wird die zweite nicht.

Das Zuweisen einer Objektreferenz zu einer Variablen hat keinen Einfluss auf die Eigentümerschaft des Objekts. Sie haben alloc aufgerufen, was bedeutet, dass Sie der Eigentümer sind, unabhängig davon, ob Sie die Ergebnisse dieses Aufrufs überhaupt erfassen. Wenn du es nicht tust, bist du durchgesickert.

Die zweite Option ([NSMutableDictionary dictionary]) wird nicht geleakt, da +dictionary ein Objekt zurückgibt, das nicht im Besitz von Autoreleases ist.

Kurz gesagt, Ihre Intuition ist korrekt. Herzliche Glückwünsche! Viele Leute, die Fragen zur Speicherverwaltung hier stellen, machen es normalerweise falsch. :)

+0

Danke! Ich brauchte nur eine kleine Bestätigung :) –

Verwandte Themen