Junior — Middle
87
Swift тілінде жабықтықта циклілік сілтемелерді болдырмау үшін weak self қолдану керек болған жағдайды мысалмен көрсете аласыз ба?
Сұралған компаниялар
Umbrella IT
AI-дан жауап
sobes.tech AI
В Swift циклическая ссылка возникает, когда объект захватывается замыканием, а замыкание хранится в этом же объекте, что приводит к удержанию друг друга и утечке памяти. Чтобы этого избежать, используют 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 слабо и не удерживает объект, позволяя ему освободиться.