Junior — Middle
Aký je rozdiel medzi používaním kľúčových slov 'unowned' a 'strong' pri deklarovaní odkazov v Swift?
sobes.tech AI
Odpoveď od AI
V Swift-e sa kľúčovými slovami strong a unowned sa spravujú odkazy a predchádza sa cyklom udržiavania (retain cycles).
-
strong — je štandardný silný odkaz, ktorý zvyšuje čítač odkazov objektu. Pokiaľ existuje aspoň jeden silný odkaz, objekt nebude odstránený z pamäti.
-
unowned — je slabý, ale nie voliteľný odkaz. Nezvyšuje čítač odkazov, ale predpokladá, že odkazovaný objekt vždy existuje počas používania tohto odkazu. Ak je objekt už odstránený, prístup k
unownedodkazu spôsobí chybu počas behu.
Príklad:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt
Tu je tenant deklarovaný ako unowned, pretože byt nemá držať osobu silným odkazom, aby sa predišlo cyklu, ale predpokladá sa, že osoba existuje dlhšie ako byt.