Junior — Middle
Ako správne organizovať odkazy v objektovom modeli, aby sa predišlo cyklickému zadržiavaniu pamäte?
sobes.tech AI
Odpoveď od AI
Na prevenciu cyklu zachytávania pamäte v objektovom modeli na iOS (použitím Swift alebo Objective-C) je dôležité správne používať silné (strong), slabé (weak) a bez vlastníctva (unowned) odkazy.
Hlavná myšlienka:
- strong — vlastnícky odkaz, zvyšuje počet odkazov na objekt.
- weak — ne vlastnícky odkaz, nezvyšuje počet, automaticky sa nastaví na nil pri odstránení objektu.
- unowned — ne vlastnícky odkaz, nezvyšuje počet, ale neustále sa neustavuje na nil, používa sa, keď je zaručené, že objekt bude žiť dlhšie.
Často vznikajú cykly, napríklad medzi rodičom a dieťaťom alebo medzi delegátom a objektom. Aby ste sa vyhli cyklom:
- Rodič drží dieťa cez strong.
- Dieťa odkazuje na rodiča cez weak alebo unowned.
Príklad v Swift:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // slabý odkaz, aby sa predišlo cyklu
}
let parent = Parent()
let child = Child()
parent.child = child
child.parent = parent
Týmto spôsobom sa pamäť správne uvoľní, keď parent a child prestanú byť používané, bez cyklov a únikov pamäte.