Назад к вопросам
JuniorТеорияЧасто
Что выведет программа (строки через пробел)?
class Screen {
var onTap: () -> Void = {}
init() {
onTap = { [weak self] in print(self == nil) }
}
deinit { print("bye") }
}
var screen: Screen? = Screen()
let tap = screen!.onTap
screen = nil
tap()bye true
- Ждать
false, считая, что сохранённое замыкание держит экран.[weak self]не прибавляет к счётчику, поэтомуscreen = nilосвобождает объект, иdeinitпечатаетbye. - Ждать аварийного завершения, путая
[weak self]с[unowned self]. Приweak-захватеselfосвобождённого объекта равенnil, и замыкание работает безопасно.
- Что изменится, если замыкание будет пользоваться
selfбез списка захвата? - Зачем Swift требует явно писать
self.в таком замыкании?