Если на объект существует только одна несильная ссылка (unowned), то это означает, что объект должен быть жив, пока эта ссылка существует. Однако, если объект уже деинициализирован (освобожден), а unowned ссылка пытается к нему обратиться, это приведёт к крашу приложения, так как unowned ссылки не становятся nil автоматически и не удерживают объект.
Что произойдет с объектом, если на него существует только одна несильная ссылка (unowned) и она станет недоступной?
Если на объект существует только одна несильная ссылка (unowned), то это означает, что объект должен быть жив, пока эта ссылка существует.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что произойдет с объектом, если на него существует только одна несильная ссылка (unowned) и она станет недоступной?
Ответ
Если на объект существует только одна несильная ссылка (unowned), то это означает, что объект должен быть жив, пока эта ссылка существует. Однако, если объект уже деинициализирован (освобожден), а unowned ссылка пытается к нему обратиться, это приведёт к крашу приложения, так как unowned ссылки не становятся nil автоматически и не удерживают объект.
То есть, unowned ссылка предполагает, что объект существует, но не удерживает его. Если объект становится недоступен (освобождается), а unowned ссылка остаётся, попытка доступа к ней вызовет ошибку времени выполнения.
Пример:
class Owner {
var child: Child?
}
class Child {
unowned let owner: Owner
init(owner: Owner) {
self.owner = owner
}
}
var owner: Owner? = Owner()
owner!.child = Child(owner: owner!)
owner = nil // Owner и Child освобождаются
// Теперь unowned ссылка child.owner указывает на освобождённый объект — обращение к ней вызовет краш