Sobes.tech
Junior — Middle

Kun je uitleggen wat het gebruik van het trefwoord 'unowned' betekent bij het werken met sterke verwijzingen in Swift en hoe dit het geheugenbeheer beïnvloedt?

sobes.tech AI

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