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