2013-10-10 4 views
0

Я зачистить вид таблицы делегирования и исходные данные методы непосредственно в dealloc, как показано ниже:застрявшей просмотр таблицы делегатов и источники данных в dealloc

- (void)dealloc 
{ 
    self.tableView.delegate = nil; 
    self.tableView.dataSource = nil; 
} 

Но, глядя на некоторых интернет-примеров dealloc, я вижу, что все это проверки, загружен ли вид перед удалением из делегата и данных источника, как показано ниже:

- (void)dealloc 
{ 
    if ([self isViewLoaded]) 
    { 
     self.tableView.delegate = nil; 
     self.tableView.dataSource = nil; 
    } 
} 

Любопытно знать, это просто проверить, если память выделяется для зрения, если да, то понятно, еще нет. Или есть какая-то конкретная причина для добавления чека здесь?

ответ

2

Если ваш контроллер является контроллером табличного представления, тогда вызов self.tableView, когда представление не загружено, приведет к его загрузке. Если вы собираетесь освободиться, тогда нет смысла прилагать усилия по загрузке представления. Поэтому проверка isViewLoaded - это дешевый способ предотвратить это.

0

То, что @Wain упоминает, является правильным. Однако, согласно iOS Memory Management Guidelines, вы должны НИКОГДА не используйте self, чтобы обратиться к ивару внутри init или dealloc именно для ситуаций, подобных описанным им.

правильный способ сделать это будет:

- (void)dealloc 
{ 
    _tableView.delegate = nil; 
    _tableView.dataSource = nil; 
} 

Надеется, что это помогает!

 Смежные вопросы

  • Нет связанных вопросов^_^