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

Можете объяснить, что означает использование ключевого слова 'unowned' при работе с сильными ссылками в Swift и как это влияет на управление памятью?

Компании, где спрашивали
О5.ru

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

sobes.tech AI

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

Это значит, что unowned ссылка не удерживает объект в памяти, но при обращении к ней программа не проверяет, существует ли объект, и если объект уже освобожден, то будет ошибка времени выполнения (crash).

Отличие от weak:

  • weak ссылки опциональны и автоматически становятся nil, если объект освобождается.
  • 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 будет существовать дольше, чем квартира.