Выбор ответа Junior ARC и циклы ссылок спрашивают часто обновлено
Почему делегат объявляют weak
Вопрос
Почему свойство delegate у UITableView и в своих классах объявляют weak?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Владелец держит объект, и сильная обратная ссылка дала бы цикл. Контроллер владеет таблицей (через view), таблица ссылается на контроллер как на делегат.
Варианты ответа
- Владелец держит объект, и сильная обратная ссылка дала бы циклправильный ответ
- Чтобы делегата можно было безопасно менять из другого потока
- Так методы делегата вызываются быстрее, без лишних retain и release
- Чтобы делегат был опциональным и его можно было не назначать
Разбор
Контроллер владеет таблицей (через view), таблица ссылается на контроллер как на делегат. Если обе ссылки сильные, при закрытии экрана счётчики не упадут до нуля, и оба объекта утекут. Слабая ссылка разрывает цикл. Потоки и скорость тут ни при чём, а опциональность следствие weak, а не цель.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Цикл ссылок через замыкание-свойство
Следующий вопрос
DispatchQueue.main.async и self
Ещё по теме «ARC и циклы ссылок»
- Когда нужен autoreleasepool в Swift
- Как найти утечку памяти в iOS-приложении
- Жизненный цикл объекта в Swift-рантайме
- Когда уместен unowned
- Задача на Swift: какие объекты утекут из-за циклов ссылок
- Инструменты для поиска проблем с памятью
- Утечка через NotificationCenter
- Порядок событий при освобождении объекта