DevPrep

All topics › Memory management

[weak self] vs [unowned self] — when to use which?

Middle PRO

The difference

Both avoid bumping self's strong count and so break the cycle "object stores closure, closure holds object". They differ in behavior once self is dead:

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

    func bind(label: UILabel) {
        onChange = { [weak self] in
            guard let self else { return }   // closure may outlive self? → weak
            label.text = self.title
        }
    }
}

The rest of this answer, with code and interview follow-ups, is in the DevPrep app.

Read the full answer in DevPrep

Practice this before your interview

DevPrep turns these answers into one-minute challenges: what does this code print, find the bug, mock interviews. One challenge a day.

Get DevPrep on the App Store