Back to questions
Junior — Middle
69
При каких обстоятельствах следует применять слабуя ссылку (weak) внутри замыкания (closure)?
Answer from AI
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.