Junior — Middle
Hogyan szervezzük meg helyesen a hivatkozásokat az objektummodellben a memória ciklusok megelőzése érdekében?
sobes.tech MI
Válasz az MI-től
Az iOS objektummodellben a memória ciklikus megtartásának elkerülése érdekében (Swift vagy Objective-C használatával) fontos, hogy helyesen használjuk az erős (strong), gyenge (weak) és tulajdon nélküli (unowned) hivatkozásokat.
Fő ötlet:
- strong — tulajdonló hivatkozás, növeli az objektum hivatkozásszámát.
- weak — nem tulajdonló hivatkozás, nem növeli a számlálót, automatikusan nil-re áll, amikor az objektum törlésre kerül.
- unowned — nem tulajdonló hivatkozás, nem növeli a számlálót, de nem állítódik nil-re, amikor az objektum hosszabb ideig él.
Gyakran keletkeznek ciklusok, például szülő és gyermek között vagy delegált és objektum között. A ciklusok elkerülése érdekében:
- A szülő strong-on tartja a gyermeket.
- A gyermek a szülőre weak vagy unowned hivatkozással utal.
Swift példával:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // gyenge hivatkozás a ciklus elkerülése érdekében
}
let parent = Parent()
let child = Child()
parent.child = child
child.parent = parent
Így, amikor a parent és a child már nem használatosak, a memória helyesen felszabadul, ciklusok és szivárgások nélkül.