Sobes.tech
Junior — Middle

Kokiose situacijose naudojama silpna nuoroda į objektą?

sobes.tech AI

Atsakymas iš AI

iOS'e silpna nuoroda (weak reference) naudojama siekiant išvengti stiprių nuorodų ciklų (retain cycles), kurie gali sukelti atminties nutekėjimą. Ji nepadidina objekto nuorodų skaitiklio, todėl objektas gali būti atlaisvintas net ir turint silpnų nuorodų į jį.

Tipinės silpnų nuorodų naudojimo situacijos:

  • Delegatai: dažnai deklaruojami kaip weak, kad išvengtų ciklo tarp objekto ir jo delegato.
  • Uždarymai (closures): jei uždarymas užfiksuoja self, siekiant išvengti ciklo, self užfiksuojamas su [weak self].
  • Ryšiai tarp objektų, kur vienas objektas valdo kitą, o kitas turi nuorodą be nuosavybės.

Pavyzdys su delegatu:

protocol SomeDelegate: AnyObject {
    func didUpdate()
}

class SomeClass {
    weak var delegate: SomeDelegate?
}

Taip silpna nuoroda padeda valdyti atmintį ir išvengti nutekėjimų.