Junior — Middle
Kako pravilno organizovati linkove u objektnom modelu da bi se sprečilo ciklično zadržavanje memorije?
sobes.tech АИ
Одговор од АИ
Da biste sprečili ciklično zadržavanje memorije u modelu objekata na iOS (koristeći Swift ili Objective-C), važno je pravilno koristiti jake (strong), slabe (weak) i bezvlasničke (unowned) reference.
Glavna ideja:
- strong — referenca koja poseduje, povećava brojač referenci objekta.
- weak — referenca koja ne poseduje, ne povećava brojač, automatski se postavlja na nil kada se objekat ukloni.
- unowned — referenca koja ne poseduje, ne povećava brojač, ali se ne postavlja na nil, koristi se kada je garantovano da objekat traje duže.
Često nastaju ciklusi, na primer, između roditelja i deteta ili između delegata i objekta. Da biste izbegli cikluse:
- Roditelj drži dete putem strong.
- Dete referencira roditelja putem weak ili unowned.
Primer u Swift:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // slab odraz, da se izbegne ciklus
}
let parent = Parent()
let child = Child()
parent.child = child
child.parent = parent
Na ovaj način, kada parent i child prestanu da se koriste, memorija se pravilno oslobađa, bez curenja usled ciklusa.