Sobes.tech
Junior — Middle

Дар кадом ҳолатҳо бояд дар дохили пӯшиш (closure) истиноди заиф (weak) истифода шавад?

sobes.tech AI

Ҷавоб аз AI

Дарчинҳои заиф (weak) дар дохили пӯшишҳо (closures) дар iOS барои пешгирӣ кардани циклҳои ишораҳои қавӣ (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 пешгирӣ мекунад.