Junior — Middle
Meg tudná magyarázni, mit jelent az 'unowned' kulcsszó használata erős hivatkozásokkal Swiftben, és hogyan befolyásolja ez a memória kezelést?
sobes.tech MI
Válasz az MI-től
Swiftben a unowned kulcsszó egy gyenge (unowned) hivatkozás deklarálására szolgál, amely nem növeli az objektum hivatkozásszámát, de feltételezi, hogy az objektum az egész hivatkozás élettartama alatt létezik.
Ez azt jelenti, hogy a unowned hivatkozás nem tartja az objektumot memóriában, de amikor hozzáfér hozzá, a program nem ellenőrzi, hogy az objektum létezik-e, és ha az objektum már felszabadult, futási időben hiba (crash) lép fel.
Különbség a weak-hez képest:
- A
weakhivatkozások opcionálisak és automatikusan nil értékre változnak, ha az objektum felszabadul. - A
unownedhivatkozások nem opcionálisak és nem válnak nil-é, így biztonságosan használhatók, amikor biztosak vagyunk benne, hogy az objektum hosszabb ideig fog létezni, mint a hivatkozás.
Példa:
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
Itt az Apartment tartalmaz egy unowned hivatkozást a Person-re, mivel feltételezzük, hogy a Person hosszabb ideig fog létezni, mint a lakás.