Warum muss ein Convenience-Konstruktor oder Objekt-Fabrik über die Freigabe der Objekt kümmern?

StackOverflow https://stackoverflow.com/questions/811290

Frage

Eigentlich, wenn Sie eine Methode mit „neuen“ verwenden, „create“, „alloc“ oder „Kopie“ in seinem Namen, dann sind Sie verantwortlich für die Freigabe des Objekts, das Sie vielleicht zurückgeführt wird. ABER: Warum machen diese Methoden einen Aufruf an -autorelease? Wäre das nicht das Ergebnis in "over-Freigabe" das Objekt?

Lassen Sie uns sagen ich das Objekt aus einem solchen Verfahren, und dann rufe ich -release darauf. Das Objekt befindet sich in der Autofreigabepool und hat einen Referenzzähler von 0. Was als nächstes passieren würde, wenn der Autofreigabepool freigegeben wird?

War es hilfreich?

Lösung

Convenience Konstrukteure haben keine dieser Worte in ihrem Namen (zum Beispiel [NSMutableArray-Array]), so vereinbarungs sie Autoreleased Objekte zurück. Methoden, die eines der Worte zu tun haben, die sie zurückgeben beibehalten Objekt nicht nennen Autorelease, so dass ein Teil der Prämisse Ihrer Frage nicht korrekt ist.

Wenn Sie Objekte freigeben zurückgegeben von einem Convenience-Konstruktor selbst (ohne sie explizit festgehalten hat), dann werden sie über freigegeben, und Ihre Anwendung wird wahrscheinlich zum Absturz bringen.

Andere Tipps

Leider @all! Ich habe in der hellen Sonne zu lange sitzen, denke ich. Natürlich haben diese Bequemlichkeit Methoden das Eigentum an den Objekten, die sie schaffen, weil sie am Anfang zu einem bestimmten Zeitpunkt nennen -alloc. Und die -alloc Methode selbst nicht nennen -alloc, da es bereits -alloc. Das ist es.

Nachdenken über die Frage zu löschen, aber vielleicht jemand anderes war zu lange in der Sonne sitzt, auch, genau wie ich. So könnte dies helfen.

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