Sobes.tech
Back to questions
Junior — Middle
82

Какие существуют типы ссылок без владения (Unowned) в языках программирования, например, Swift?

Companies where asked
Touch Instinct

Answer from AI

sobes.tech AI

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

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

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

Пример:

class Person {
    var apartment: Apartment?
}

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

let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt

Здесь Apartment хранит unowned ссылку на Person, предполагая, что Person будет существовать дольше. Если Person удалится раньше, обращение к tenant вызовет ошибку.