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í
weaknezvyš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ýtnil, 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.