ios – 为什么如果对象将要被销毁,我们将委托设置为nil在dealloc?

前端之家收集整理的这篇文章主要介绍了ios – 为什么如果对象将要被销毁,我们将委托设置为nil在dealloc?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
-(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;
}

在这里我需要设置self.tableView.delegate = nil以避免错误.

我知道,从我以前的问题,self.tableView.delegate不会自动成为nill当委托被销毁.这是因为委托的类型是分配引用而不是弱引用.

但是,self.tableView呢?

唯一有很强的参考self.tableView的是它是由self和self itsef拥有的超级视图.

所以当自我毁灭时,self.tableView应该被销毁,这意味着self.tableView.delegate也将被消除.

那么为什么我需要设置self.tableView.delegate = nil;

解决方法

如果您持有self.tableView的唯一参考,则无需将委托设置为nil.

唯一需要将代理设置为nil的情况,如果是另一个类,则将您的类作为委托,因为如果您的类被销毁,则该其他类将寻找您的类来实现某些方法,并且您的调用将不会在那里

猜你在找的iOS相关文章