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
;