Sobes.tech
Junior — Middle

Можете ли објаснити шта подразумева термин 'Unowned' у контексту управљања меморијом?

sobes.tech АИ

Одговор од АИ

У контексту управљања меморијом у iOS (и Swift), термин "Unowned" означава слабу референцу на објекат која не повећава број референци (retain count), али претпоставља да објекат постоји током коришћења те референце.

Разлике у односу на weak:

  • weak референца може постати nil ако је објекат уклоњен, и зато се декларативно дефинише као опционална.
  • unowned референца није опционална и не аутоматски се поставља на nil. Ако је објекат на који се односи unowned уклоњен, покушај приступа ће довести до грешке у току извршавања (crash).

Користи се када је загарантовано да је животни век објекта на који се референца односи дужи или једнак животном веку референце.

Пример:

class Owner {
    var pet: Pet?
}

class Pet {
    unowned let owner: Owner
    init(owner: Owner) {
        self.owner = owner
    }
}

let owner = Owner()
owner.pet = Pet(owner: owner)

Овде, Pet задржава unowned референцу на Owner, претпостављајући да Owner живи дуже од Pet.