Junior — Middle
Масъул мешавам мисол диҳед, кайҳо дар closure-и Swift бояд weak self истифода шавад, то аз сиклӣ референсҳо пешгирӣ шавад?
sobes.tech AI
Ҷавоб аз AI
Дар Swift, иштиҳолии ишора вақте рух медиҳад, ки объект дар як пӯшида (closure) худро ба ёд меорад ва он пӯшида дар ҳамин объект нигоҳ дошта мешавад, ки ба нигоҳ доштани мутақобил ва шикасти хотира оварда мерасонад. Барои пешгирӣ кардани ин, истифода мешавад weak self.
Масалан: шумо як синфи ViewController доред, ки як амали асинхронро бо пӯшида оғоз мекунад. Агар дар пӯшида мустақиман self истифода шавад, пас ViewController аз ҷониби пӯшида нигоҳ дошта мешавад ва пас аз баста шудан озод намешавад.
class ViewController: UIViewController {
func fetchData() {
networkRequest { [weak self] data in
guard let self = self else { return }
self.updateUI(with: data)
}
}
func updateUI(with data: Data) {
// навсозии интерфейс
}
}
Ин ҷо, weak self аз иштиҳолии қавӣ пешгирӣ мекунад, зеро пӯшида self-ро заиф мегирад ва объектро нигоҳ намедорад, ки имкон медиҳад онро озод кунанд.