Ich glaube, ich kenne den Unterschied, weiß aber nicht, wie ich das richtig erklären soll.
dealloc entfernt den von dieser Variablen reservierten Speicher vollständig und sofort.
release dekrementiert den Retain-Zähler des Speichers dieser Variablen um -1. Wenn es 1 ist, dann ist es 0, also würde es den gleichen Effekt haben wie dealloc in diesem Moment.
ist das richtig? oder gibt es eine bessere kurze Erklärung?
Das stimmt genau.
Aber Sie würden dealloc
nicht verwenden, wenn Sie ein Objekt verwenden, weil Sie nicht wissen, wie hoch die Retain-Anzahl ist. Es ist dir auch egal. Du sagst einfach, dass du es nicht mehr brauchst, indem du release
aufruft. Und wenn niemand das tut, ruft das Objekt dealloc
auf sich selbst auf.
Alles in Ordnung, aber der einzige wichtige Punkt, den Sie verpassen, ist, dass Sie Dealloc niemals selbst aufrufen sollten. Hier einige Informationen aus der Dokumentation von Apple zur Dealloc-Methode von NSObject:
(aus Ссылка )
Sie senden niemals eine Dealloc-Nachricht direkt. Stattdessen wird das Dealloc eines Objekts aufgelöst Methode wird indirekt über aufgerufen die Freigabe NSObject-Protokollmethode (Wenn die Freigabenachricht in der Empfänger behalten Zählung wird 0). Siehe Speicherverwaltungsprogrammierung Leitfaden für Kakao für weitere Details auf die Verwendung dieser Methoden.
Unterklassen müssen ihre eigenen implementieren Versionen von Dealloc zu ermöglichen Freigabe von zusätzlichem Speicher verbraucht durch das Objekt - wie z dynamisch zugeordneter Speicher für Daten oder Objektinstanzvariablen, die zu. gehören das freigegebene Objekt. Nach Durchführen der klassenspezifischen Deallokation, die Unterklassenmethode sollte Superklassenversionen enthalten dealloc durch eine Nachricht an super: