Sobes.tech
Junior — Middle

Vai vari paskaidrot, ko nozīmē izmantot vāju atsauci uz self aizvēršanās?

sobes.tech AI

Atbilde no AI

iOS (Swift) aizvākumos (closures) izmantot vājo atsauci (weak reference) uz self palīdz novērst noturēšanas ciklus (retain cycles), kas noved pie atmiņas noplūdes. Kad aizvākums noķer self kā stipru atsauci, un self satur šo aizvākumu, tie viens otru tur, un atmiņa netiek atbrīvota.

Piemērs:

class MyClass {
    var closure: (() -> Void)?

    func setup() {
        closure = { [weak self] in
            guard let self = self else { return }
            self.doSomething()
        }
    }

    func doSomething() {
        print("Action")
    }
}

Šeit [weak self] nozīmē, ka aizvākuma iekšienē self būs vāja atsauce, un ja objekts tiks iznīcināts, atsauce kļūs nil, novēršot atmiņas noplūdi.