Setting delegate to nil in dealloc

In Objective-C, I understand that if an object sets itself as the delegate of another object, it should set that object’s delegate to nil in its dealloc to avoid getting sent messages after it’s gone.

However, when using Accessorizer (an Xcode utility), the stub code it generates also puts a delegate = nil in the dealloc of the class that has the delegate instance variable. What is the purpose of that?

  • Access nested collectionView in viewController that does not have reference to it
  • Compiler error when assigning the Delegate for a Protocol in Swift iOS
  • Do system object delegates in ARC need to be set to nil?
  • how to set a tableview delegate
  • swift delegate beetween two view controller without segue
  • Difference between protocol and delegates?
  • Solutions Collect From Internet About “Setting delegate to nil in dealloc”

    It’s a defensive programming move. It’s clearing out the reference to the delegate object incase something else in your object tries to access the delegate after you’ve told it that you’re done with it. As part of your dealloc you might have a method or do something that triggers a KVO notification that makes a call to the delegate. So setting the delegate’s reference to nil prevents that from happening. If it did happen you could end up with some oddball crashes that are fun to reproduce and fix.