Ja, [super dealloc]
immer letzte Mal gewesen sein muss, wie oben gesagt, weil Referenzierung self
oder andere Einbauten der Regel als selbstverständlich angesehen wird nicht funktionieren, und zum Absturz bringen können, wie sagte auch oben. Ein weiterer Grund, der oben nicht erwähnt wurde, ist, dass die iavar in dem Stück Speicher sind, auf den self
zeigt. Wenn Sie also nach ([super dealloc]
) mit (wie der Veröffentlichung) diese Dinge tun würden, würden Sie den Speicher freigeben.
Ich sagte 'may crash' oben, weil wenn Sie dies falsch tun neigt es tatsächlich nicht zum Absturz, was Sinn macht in Anbetracht der Speicher wird nicht überschrieben, bis es wiederverwendet wird. Dies macht es umso schlimmer, weil Sie möglicherweise einen Fehler haben, der nur manchmal auftritt, so dass es besonders schwer zu finden ist, falls es in Ihrem Gesicht explodiert.
Other than that, sind Sie völlig in Ordnung, wenn Sie eine lokale Variable veröffentlicht seine oder Dingsbums nach [super dealloc]
, und Sie können, wenn Sie wirklich wollen, etwas tun, wie
id local = ivar;
[super dealloc];
[local release];
sicher, aber in der Interesse der Konsistenz, nicht.
In Summe, ja, [super dealloc]
muss die letzte Sache in -dealloc sein.
danke für die beschreibende Antwort! nur neugierig, kann dies einen Fehler KERN_PROTECTION oder KERN_INVALID_ADDRESS verursachen? –
@Sheehan Alam: NSObjects 'dealloc' befreit das Objekt. Der Zugriff auf "self", nachdem es ausgeführt wurde, ist genauso wie der Zugriff auf freigegebenen Speicher - es könnte einen Fehler verursachen oder viel seltsamere Dinge verursachen. – Chuck
@Sheeham, Ja. Das ist eine Möglichkeit. –