Kako korišćenje unowned utiče na upravljanje vremenom života objekta u programiranju?
sobes.tech АИ
Одговор од АИ
U iOS (Swift), ključna reč unowned se koristi za deklarisanje slabog referencu na objekat, koja ne povećava brojač referenci, ali pretpostavlja da će objekat postojati tokom celog trajanja referencije.
Korišćenje unowned pomaže da se izbegnu ciklične reference (retain cycles), koje mogu dovesti do curenja memorije. Za razliku od weak, unowned referenca nije opcionalna i ne postaje nil nakon oslobađanja objekta, stoga je treba koristiti samo ako je garantovano da će objekat duže postojati od referencije.
Primer:
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
Ovde, Apartment drži unowned referencu na Person, da bi izbegao ciklus, pretpostavljajući da će Person uvek postojati dok postoji Apartment. Ako Person bude uklonjen ranije, pristup unowned referenci će izazvati grešku u izvršenju.