Назад к вопросам
Альфа-Банк
Junior — Middle
77
Могут ли ситуации, связанные с использованием слабых (unowned) ссылок, привести к сбою приложения? Приведите пример.
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Да, использование слабых (unowned) ссылок в Swift может привести к сбою приложения, если объект, на который ссылается unowned ссылка, уже был освобожден, а попытка доступа к этой ссылке происходит позже.
Unowned ссылки предполагают, что объект существует всегда, пока ссылка жива. Если это не так, приложение упадет с ошибкой "EXC_BAD_ACCESS".
Пример:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
var john: Person? = Person()
john!.apartment = Apartment(tenant: john!)
john = nil // объект Person освобождается
// Теперь apartment.tenant — unowned ссылка на уже освобожденный объект
// Попытка доступа приведет к сбою
print(john!.apartment!.tenant) // crash
Чтобы избежать таких сбоев, нужно быть уверенным, что unowned ссылка не будет использоваться после освобождения объекта, либо использовать weak ссылки, которые становятся nil после освобождения объекта.