Сильные ссылки увеличивают счетчик ссылок объекта, предотвращая его деаллокацию. Слабые ссылки не увеличивают счетчик ссылок и используются для предотвращения циклов сильных ссылок.
Основное различие:
nil.Пример цикла сильных ссылок:
swift
Чтобы решить проблему цикла сильных ссылок, используем слабую ссылку:
swift
Используют сильные ссылки по умолчанию. Слабые ссылки используются, когда нет уверенности в жизненном цикле связанного объекта или для предотвращения циклов.
Также существует ссылка unowned, которая похожа на слабую, но предполагает, что связанный объект всегда будет существовать, пока существует ссылка. Если объект освобождается, попытка доступа к unowned ссылке приведет к ошибке времени выполнения. Слабая ссылка в этом случае станет nil. unowned используется, когда два объекта всегда имеют одинаковый жизненный цикл, а один из них всегда будет существовать, пока есть ссылка на другой.
Сводная таблица:
| Тип ссылки | Увеличивает счетчик ссылок | Может стать nil | Предполагает существование объекта | Применение |
|---|---|---|---|---|
| Strong | Да | Нет | Да | Владение объектом |
| Weak | Нет | Да | Нет (может стать nil) | Предотвращение циклов сильных ссылок, опциональные связи |
| Unowned | Нет | Нет | Да (программа упадет, если объект освобожден) | Когда объект ссылки имеет такой же или более длительный жизненный цикл |