Why do we set delegate to nil at dealloc if the object is going to be destroyed anyway?

Viewed 3992
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    PO(NSStringFromCGPoint(self.tableView.contentOffset));
    PO(NSStringFromUIEdgeInsets(self.tableView.contentInset));

    while(false);
}

-(void)dealloc
{
    PO(NSStringFromClass([self class]));
    PO(@"Deallocated");
    self.tableView.delegate=nil;
}

Here I need to set self.tableView.delegate = nil to avoid error.

I am aware, from my previous question, that self.tableView.delegate won't automatically become nill when the delegate is destroyed. That's because the type of delegate is assign reference instead of weak reference.

However, what about self.tableView?

The only thing with strong reference to self.tableView is it's superview that's owned by self and self itsef.

So when self is destroyed, self.tableView should be destroyed too and that means self.tableView.delegate will be gone too.

So why do I need to set self.tableView.delegate=nil;

4 Answers
Related