Выбор ответа Junior ARC и циклы ссылок спрашивают часто обновлено
Разница между weak и unowned
Вопрос
Чем unowned отличается от weak?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: unowned не опциональна и не обнуляется: после освобождения крэш. Обе ссылки не увеличивают счётчик сильных ссылок. weak всегда опциональная и становится nil после освобождения объекта. unowned предполагает, что объект живёт не меньше ссылки: она не опциональна, и обращение к освобождённому объекту это…
Варианты ответа
unownedудерживает объект, как сильная ссылка, аweakнетunownedработает только со структурами, аweakс классамиunownedне опциональна и не обнуляется: после освобождения крэшправильный ответunownedобнуляется так же, какweak, но работает быстрее
Разбор
Обе ссылки не увеличивают счётчик сильных ссылок. weak всегда опциональная и становится nil после освобождения объекта. unowned предполагает, что объект живёт не меньше ссылки: она не опциональна, и обращение к освобождённому объекту это гарантированный trap. Обе применимы только к классам. Классический пример unowned: Customer и CreditCard, где карта не существует без владельца.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «ARC и циклы ссылок»
- Когда нужен autoreleasepool в Swift
- Цикл ссылок через замыкание-свойство
- Почему делегат объявляют weak
- DispatchQueue.main.async и self
- Как найти утечку памяти в iOS-приложении
- Жизненный цикл объекта в Swift-рантайме
- Когда уместен unowned
- Задача на Swift: какие объекты утекут из-за циклов ссылок