Sobes.tech
Назад к вопросам
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 после освобождения объекта.