Назад к вопросам
Разумные решения
Junior — Middle
72
Можешь привести пример, когда в замыкании в Swift нужно использовать weak self для предотвращения циклических ссылок?
Компании, где спрашивали
Umbrella IT
Ответ от нейросети
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 слабо и не удерживает объект, позволяя ему освободиться.