In Objective-C verstehe ich, dass wenn ein Objekt sich selbst als Delegat eines anderen Objekts einstellt, es den Delegaten dieses Objekts auf nil
in seinem dealloc
setzen sollte, um zu verhindern, dass Nachrichten nach dem Ende gesendet werden.
Wenn jedoch Accessorizer (ein Xcode-Dienstprogramm) verwendet wird, wird durch den von ihm generierten Stubcode auch delegate = nil
in dealloc
der Klasse mit der Delegateninstanzvariablen eingefügt. Was ist der Zweck davon?
Es ist eine defensive Programmierung. Es löscht den Verweis auf das Delegat-Objekt, wenn etwas anderes in Ihrem Objekt versucht, auf den Delegaten zuzugreifen, nachdem Sie ihm gesagt haben, dass Sie damit fertig sind. Als Teil Ihres Deallocs haben Sie möglicherweise eine Methode oder tun etwas, das eine KVO-Benachrichtigung auslöst, die den Delegaten anruft. Wenn Sie also den Verweis des Delegierten auf null setzen, wird dies verhindert. Wenn es passiert wäre, könnte es zu seltsamen Abstürzen kommen, die Spaß machen, zu reproduzieren und zu beheben.
Tags und Links objective-c xcode delegates instance-variables dealloc