Setzen von delelect auf nil in dealloc

8

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?

    
jrdioko 25.05.2011, 00:29
quelle

1 Antwort

10

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.

    
McCygnus 25.05.2011, 00:41
quelle