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

Как и в каких случаях используют слабые ссылки внутри замыканий?

Компании, где спрашивали
Uzum

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

sobes.tech AI

В iOS при работе с замыканиями (closures) часто возникает проблема циклических ссылок, когда объект захватывает замыкание, а замыкание захватывает объект, что приводит к утечкам памяти. Чтобы этого избежать, используют слабые ссылки (weak references) внутри замыканий.

Слабая ссылка не увеличивает счетчик ссылок на объект, поэтому при отсутствии сильных ссылок объект может быть освобожден.

Пример использования слабой ссылки внутри замыкания:

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

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

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

Случаи использования:

  • Когда замыкание захватывает self или другие объекты, чтобы избежать retain cycle.
  • В асинхронных операциях, где объект может быть уничтожен до выполнения замыкания.

Использование слабых ссылок помогает управлять памятью и предотвращать утечки.