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

Должен ли я добавлять weak self в список захвата для каждого замыкания в Swift?

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

sobes.tech AI

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

Если замыкание используется локально и не сохраняется, или не вызывает циклических ссылок, то можно не использовать weak self.

Пример с использованием weak self для предотвращения retain cycle:

class ViewController: UIViewController {
    var completionHandler: (() -> Void)?

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

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

Если self не использовать в замыкании или замыкание не сохраняется, weak self не нужен.