Sobes.tech
Junior

Co je to weak memory modifier ve Swiftu?

sobes.tech AI

Odpověď od AI

Modifikátor weak se používá k přerušení cyklů silných odkazů mezi objekty, když jeden objekt má silnou referenci na jiný, a tento má zpět silnou referenci.

Hlavní vlastnosti weak:

  • Nezvyšuje počítadlo odkazů: Použití weak nezvyšuje počet silných odkazů na objekt.
  • Může být nil: Slabá reference je volitelná (Optional) a automaticky se stává nil, když je objekt, na který odkazuje, deinitializován.
  • Používá se pro vztahy rodič/dítě: Často se používá, když má dětský objekt odkaz na svého rodiče, aby se zabránilo cyklům silných odkazů.
  • Musí být deklarováno jako var: Protože slabá reference může být nil, musí být proměnná (var), nikoli konstanta (let).

Příklad použití:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("\(name) se inicializuje")
    }

    deinit {
        print("\(name) se deinitializuje")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Slabá reference

    init(unit: String) {
        self.unit = unit
        print("Byt \(unit) se inicializuje")
    }

    deinit {
        print("Byt \(unit) se deinitializuje")
    }
}

Bez weak var tenant: Person? ve třídě Apartment by vznikl cyklus silných odkazů a instance Person a Apartment by nebyly deinitializovány, když na ně již neukazují žádné jiné silné odkazy. Díky weak se při deinitializaci instance Person automaticky nastaví tenant v instanci Apartment na nil.