Dlaczego ustawiamy delegowanie na zero w dealloc, jeśli obiekt i tak zostanie zniszczony?

-(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;
}

Tutaj muszę ustawić self.tableView.delegate = nil, aby uniknąć błędu.

Wiem, z mojego poprzedniego pytania, że ​​self.tableView.delegate nie stanie się automatycznie, gdy delegat zostanie zniszczony. Dzieje się tak, ponieważ typ delegata jest referencyjnym przypisaniem zamiast słabego odniesienia.

Co jednak z self.tableView?

Jedyną rzeczą, która ma silne odniesienie do self.tableView, jest superview, który jest własnością samego siebie i samego siebie.

Więc kiedy self zostanie zniszczone, self.tableView powinien zostać zniszczony, co oznacza, że ​​self.tableView.delegate również zniknie.

Dlaczego więc muszę ustawićself.tableView.delegate=nil;

questionAnswers(4)

yourAnswerToTheQuestion