В Swift существует три основных вида ссылок:
-
Strong Reference (Сильная ссылка):
- Увеличивает счетчик ссылок на экземпляр объекта.
- Предотвращает деаллокацию объекта до тех пор, пока существует хотя бы одна сильная ссылка на него.
- Является типом ссылки по умолчанию в Swift.
- Основная причина возникновения циклов сильных ссылок.
-
Weak Reference (Слабая ссылка):
- Не увеличивает счетчик ссылок.
- Разрешает деаллокацию объекта, если на него больше нет сильных ссылок.
- Объявляется с использованием ключевого слова
weak.
- Всегда является опционалом (
Optional), так как ссылаемый объект может быть ничтожен (nil).
- Используется для предотвращения циклов сильных ссылок, когда один экземпляр может существовать независимо от другого.
swift
-
Unowned Reference (Несобственная ссылка):
- Не увеличивает счетчик ссылок.
- Разрешает деаллокацию объекта, если на него больше нет сильных ссылок.
- Объявляется с использованием ключевого слова
unowned.
- Не является опционалом. Предполагается, что ссылаемый объект всегда будет существовать, пока существует экземпляр, содержащий несобственную ссылку.
- Использование несобственной ссылки на объект, который уже был деаллоцирован, приведет к ошибке времени выполнения (крашу).
- Используется для предотвращения циклов сильных ссылок, когда один экземпляр всегда должен существовать, пока существует другой, и нет возможности, чтобы один из них стал
nil независимо друг от друга (например, привязка self в замыканиях).
swift
Выбор между weak и unowned зависит от характера взаимосвязи между объектами: используйте weak, когда один объект может существовать без другого (Person без Apartment), и unowned, когда один объект всегда должен существовать, пока существует другой (CreditCard всегда принадлежит Customer).