Sobes.tech
Back to questions
Junior — Middle
72

Как использование unowned влияет на управление временем жизни объекта в программировании?

Companies where asked
AvitoAvito

Answer from AI

sobes.tech AI

В iOS (Swift) ключевое слово unowned используется для объявления слабой ссылки на объект, которая не увеличивает счётчик ссылок, но при этом предполагает, что объект будет существовать в течение времени жизни ссылки.

Использование unowned помогает избежать циклических ссылок (retain cycles), которые могут привести к утечкам памяти. В отличие от weak, ссылка unowned не является опциональной и не становится nil после освобождения объекта, поэтому её безопасно использовать только если гарантировано, что объект будет существовать дольше ссылки.

Пример:

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

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

let john = Person(name: "John")
let apt = Apartment(unit: "4A", tenant: john)
john.apartment = apt

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