DevPrep

Все темы › Управление памятью

В чём разница [weak self] и [unowned self]? Когда какой?

Middle PRO

Разница

Оба не увеличивают strong-счётчик self и тем самым разрывают цикл «объект хранит замыкание, замыкание держит объект». Отличаются поведением, когда self уже умер:

final class ViewModel {
    var title = ""
    var onChange: (() -> Void)?

    func bind(label: UILabel) {
        onChange = { [weak self] in
            guard let self else { return }   // замыкание переживёт self? → weak
            label.text = self.title
        }
    }
}

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store