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