Sobes.tech
Назад к вопросам
Junior — Middle
68

При каких обстоятельствах следует применять слабуя ссылку (weak) внутри замыкания (closure)?

Ответ от нейросети

sobes.tech AI

Слабые ссылки (weak) внутри замыканий в iOS применяются для предотвращения циклов сильных ссылок (retain cycles), которые могут привести к утечкам памяти. Обычно это актуально, когда замыкание захватывает объект (например, self) и сохраняется этим объектом, создавая взаимную сильную ссылку.

Используйте weak для ссылки на self внутри замыкания, если замыкание хранится в свойстве объекта или может жить дольше, чем вызов функции, чтобы избежать удержания объекта в памяти после того, как он должен быть освобожден.

Пример на Swift:

class ViewController {
    var completion: (() -> Void)?

    func setup() {
        completion = { [weak self] in
            guard let self = self else { return }
            self.doSomething()
        }
    }

    func doSomething() {
        print("Action performed")
    }
}

Здесь [weak self] предотвращает сильный цикл между ViewController и замыканием completion.