Выбор ответа Junior ARC и циклы ссылок спрашивают часто обновлено

Почему делегат объявляют weak

Вопрос

Почему свойство delegate у UITableView и в своих классах объявляют weak?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Владелец держит объект, и сильная обратная ссылка дала бы цикл. Контроллер владеет таблицей (через view), таблица ссылается на контроллер как на делегат.

Варианты ответа

  1. Владелец держит объект, и сильная обратная ссылка дала бы циклправильный ответ
  2. Чтобы делегата можно было безопасно менять из другого потока
  3. Так методы делегата вызываются быстрее, без лишних retain и release
  4. Чтобы делегат был опциональным и его можно было не назначать

Разбор

Контроллер владеет таблицей (через view), таблица ссылается на контроллер как на делегат. Если обе ссылки сильные, при закрытии экрана счётчики не упадут до нуля, и оба объекта утекут. Слабая ссылка разрывает цикл. Потоки и скорость тут ни при чём, а опциональность следствие weak, а не цель.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.