Sobes.tech
Back to questions
Junior — Middle
81

В чем заключается назначение и использование слабых ссылок с ключевым словом unowned в программировании?

Companies where asked
ITFB
DNSDNS
Альфа-БанкАльфа-Банк

Answer from AI

sobes.tech AI

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

Отличие unowned от weak в том, что unowned не является опциональной ссылкой — она всегда предполагает, что объект существует. Если объект будет освобожден, а unowned ссылка к нему обращается, приложение упадет с ошибкой.

Используется unowned в случаях, когда одна сущность владеет другой, а вторая ссылается на первую, но не должна удерживать её в памяти. Например, делегаты часто объявляют как unowned.

Пример:

class Owner {
    var pet: Pet?
}

class Pet {
    unowned let owner: Owner
    init(owner: Owner) {
        self.owner = owner
    }
}

let owner = Owner()
owner.pet = Pet(owner: owner)

Здесь Pet ссылается на Owner через unowned, чтобы избежать цикла сильных ссылок.