Sobes.tech
Назад к вопросам
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 слабо и не удерживает объект, позволяя ему освободиться.