weak и unowned используются для разрешения циклических ссылок, но отличаются по своему поведению и применению.
| Свойство | 'weak' | 'unowned' |
|---|---|---|
| Тип | Опционал (Optional) | Не опционал |
| Lifetime | Может стать nil | Гарантированно имеет значение |
| Гарантия существования | Нет | Да, до окончания Scope |
| Применение | Когда возможна ситуация, что связанный объект будет деаллоцирован первым. | Когда связанный объект будет деаллоцирован либо одновременно с текущим, либо позже. |
| Пример | Делегат (delegate) | Связь Родитель-Ребенок (Parent-Child) |
weak:
nil.nil, когда объект, на который он ссылается, деаллоцируется.swift
unowned:
swift
Выбор между weak и unowned зависит от того, имеет ли связанный объект возможность стать nil в течение жизни текущего объекта. Если да, используйте weak. Если нет, используйте unowned.