Sobes.tech
Junior — Middle

Milyen helyzetekben használunk gyenge hivatkozást egy objektumra?

sobes.tech MI

Válasz az MI-től

iOS-ben a gyenge hivatkozás (weak reference) a erős hivatkozási ciklusok (retain cycles) megelőzésére szolgál, amelyek memória szivárgáshoz vezethetnek. Nem növeli a hivatkozás számlálót az objektumon, így az objektum felszabadítható, még akkor is, ha vannak gyenge hivatkozások rá.

A gyenge hivatkozások tipikus használati helyei:

  • Delegáltak: gyakran weak-ként vannak deklarálva, hogy elkerüljék a ciklust az objektum és delegáltja között.
  • Closure-k: ha egy closure elfogja self-et, a ciklus elkerülése érdekében [weak self]-tel fogják el.
  • Objektumok közötti kapcsolatok, ahol egy objektum másikat birtokol, és a másiknak hivatkozása van anélkül, hogy birtokolná.

Példa delegáttal:

protocol SomeDelegate: AnyObject {
    func didUpdate()
}

class SomeClass {
    weak var delegate: SomeDelegate?
}

Így a gyenge hivatkozás segít a memória kezelésében és a szivárgások megelőzésében.