Sobes.tech
Назад к вопросам
Junior — Middle
75

Какое отличие между ссылками Weak и Unowned в Swift?

Компании, где спрашивали
Альфа-БанкАльфа-Банк
Uzum

Ответ от нейросети

sobes.tech AI

В Swift ссылки weak и unowned используются для предотвращения циклов сильных ссылок, но отличаются по поведению при освобождении объекта:

  • weak — это опциональная ссылка, которая автоматически становится nil, когда объект, на который она ссылается, освобождается. Используется, когда ссылка может стать nil в течение времени жизни.

  • unowned — это не опциональная ссылка, которая предполагает, что объект всегда будет существовать во время использования ссылки. Если объект уже освобождён, обращение к unowned вызовет ошибку времени выполнения (crash).

Пример:

class Person {
    var name: String
    weak var apartment: Apartment?
    init(name: String) { self.name = name }
}

class Apartment {
    let unit: String
    unowned let tenant: Person
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Здесь apartment — слабая ссылка, так как квартира может отсутствовать, а tenant — unowned, так как квартира всегда должна иметь жильца.