Sobes.tech
Junior — Middle

Кайда жабык (closure) ичинде алсыз (weak) шилтемени колдонуу керек?

sobes.tech AI

AIден жооп

iOS ичинде жабдуулар (closures) ичинде алсыз (weak) шилтемелер күчтүү (strong) шилтемелер циклин (retain cycles) алдын алуу үчүн колдонулат, бул эс тутум агып кетүүсүнө алып келиши мүмкүн. Бул адатта, жабдуу объектти (мисалы, self) кармап калса жана ал объект тарабынан кармалса, өз ара күчтүү шилтемени түзөт.

Жабдуунун ичинде selfке шилтеме жасоо үчүн weak колдонуп, эгер жабдуу объекттин мүнөздөмөсүндө сакталса же функция чакыруусунан узак жашай алса, объектти эс тутумда кармап калуудан алдын алуу үчүн.

Swiftте мисал:

class ViewController {
    var completion: (() -> Void)?

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

    func doSomething() {
        print("Иш аткарылды")
    }
}

Бул жерде [weak self] ViewController жана completion жабдуусу ортосунда күчтүү циклдин алдын алат.