Назад к вопросам
Альфа-Банк
Junior — Middle
75
Какое отличие между ссылками Weak и Unowned в Swift?
Компании, где спрашивали
Uzum
Ответ от нейросети
sobes.tech AI
В Swift ссылки weak и unowned используются для предотвращения циклов сильных ссылок, но отличаются по поведению при освобождении объекта:
-
weak — это опциональная ссылка, которая автоматически становится
nil, когда объект, на который она ссылается, освобождается. Используется, когда ссылка может статьnilв течение времени жизни. -
unowned — это не опциональная ссылка, которая предполагает, что объект всегда будет существовать во время использования ссылки. Если объект уже освобождён, обращение к
unownedвызовет ошибку времени выполнения (crash).
Пример:
class Person {
var name: String
weak var apartment: Apartment?
init(name: String) { self.name = name }
}
class Apartment {
let unit: String
unowned let tenant: Person
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
Здесь apartment — слабая ссылка, так как квартира может отсутствовать, а tenant — unowned, так как квартира всегда должна иметь жильца.