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-тен ұзақ өмір сүретіні күтіледі.