Sobes.tech
Junior — Middle
103

Šta će se desiti sa objektom ako postoji samo jedna slaba referenca (neposedna) i ona postane nedostupna?

Одговор од АИ

sobes.tech АИ

Если на объект существует только одна несильная ссылка (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 указывает на освобождённый объект — обращение к ней вызовет краш