В Swift существует три основных типа ссылок:
Strong Reference: Стандартный тип. Увеличивает счетчик ссылок (reference count) объекта. Объект не будет освобожден из памяти, пока на него существует хотя бы одна сильная ссылка.
Weak Reference: Неувеличивающий счетчик ссылок. Помечается ключевым словом weak. Используется для предотвращения циклов сильных ссылок (retain cycles), когда два объекта сильно ссылаются друг на друга. Слабая ссылка является опционалом, так как объект может быть деаллоцирован в любой момент.
swift
Unowned Reference: Неувеличивающий счетчик ссылок, помечается ключевым словом unowned. Используется, когда уверен, что ссылка всегда будет указывать на объект с большим или таким же временем жизни. В отличие от weak, неуправляемая ссылка не является опционалом. Попытка доступа к объекту через неуправляемую ссылку после его деаллокации приведет к ошибке выполнения (runtime error).
swift
Краткое сравнение:
| Тип Ссылки | Увеличивает Retain Count | Optional | Runtime Check | Использование |
|---|---|---|---|---|
| Strong | Да | Нет | Нет | По умолчанию; где нужен полный контроль жизни |
| Weak | Нет | Да | Да | Предотвращение циклов; объект может исчезнуть |
| Unowned | Нет | Нет | Нет (попытка доступа к nil вызывает ошибку) | Предотвращение циклов; уверен, что объект существует |