Sobes.tech
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 unowned odkazu 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.