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

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Если замыкание захватывает self сильно (strong reference), а self содержит ссылку на это замыкание (например, через свойство), то возникает retain cycle, и объекты не будут освобождены.

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

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

Если замыкание не сохраняется в свойстве объекта self и не создаёт циклов, то можно использовать сильную ссылку без проблем.

Итого: использовать weak self нужно, когда замыкание может удерживать self и создавать retain cycle. В других случаях это не обязательно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее