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

Чем отличается использование ключевых слов 'unowned' и 'strong' при объявлении ссылок в Swift?

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

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

sobes.tech AI

В Swift ключевые слова strong и unowned используются для управления ссылками и предотвращения циклов удержания (retain cycles).

  • strong — это стандартная сильная ссылка, которая увеличивает счетчик ссылок на объект. Пока есть хотя бы одна сильная ссылка, объект не будет удалён из памяти.

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

Пример:

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

Здесь tenant объявлен как unowned, потому что квартира не должна удерживать человека сильной ссылкой, чтобы избежать цикла, но при этом предполагается, что человек существует дольше квартиры.