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 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...