Назад к вопросам
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 будет существовать дольше, чем квартира.