Junior — Middle
V čem spočívá rozdíl mezi použitím klíčových slov 'unowned' a 'strong' při deklaraci odkazů ve Swiftu?
sobes.tech AI
Odpověď od AI
Ve Swiftu se klíčová slova strong a unowned používají k řízení odkazů a prevenci cyklů udržování (retain cycles).
-
strong — je to standardní silný odkaz, který zvyšuje čítač odkazů objektu. Dokud existuje alespoň jeden silný odkaz, objekt nebude odstraněn z paměti.
-
unowned — je to slabý, ale nevolitelný odkaz. nezvyšuje čítač odkazů, ale předpokládá, že odkazovaný objekt vždy existuje během používání tohoto odkazu. Pokud je objekt již odstraněn, přístup k
unownedodkazu způsobí běhovou chybu.
Pří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
Zde je tenant deklarován jako unowned, protože byt nemá držet osobu silným odkazem, aby se zabránilo cyklu, ale předpokládá se, že osoba existuje déle než byt.