Sobes.tech
Junior — Middle

Swift-те күшті сілтемелермен жұмыс істегенде 'unowned' кілтсөзі қолданудың мәні неде екенін және ол қалай жадыны басқаруға әсер ететінін түсіндіре аласыз ба?

sobes.tech AI

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 Person-ға unowned сілтемесін сақтайды, себебі Person-нің Apartment-тен ұзақ өмір сүретіні күтіледі.