Описание тега weak-references
Слабая ссылка - это ссылка, которая не заставляет систему управления памятью удерживать ссылочный объект. Он используется в тех случаях, когда требуется ссылка на рассматриваемый объект, если он все еще нужен / используется в другом месте, но также не препятствует его восстановлению системой управления памятью в ходе ее обычного жизненного цикла.
Слабые ссылки особенно важны в тех случаях, когда два или более объекта могут ссылаться друг на друга, и вы хотите избежать "цикла сохранения" или "цикла сильных ссылок", когда циклические комбинации сильных ссылок не позволят восстановить память. Одно из распространенных способов использования слабых ссылок в сочетании с замыканиями и обратными вызовами.
Некоторые языки со сборкой мусора имеют или поддерживают различные уровни слабых ссылок, например java, C#, python, perl и lisp.
Языки подсчета ссылок, такие как objective-c и swift, используютweak
(а также unowned
) ссылки для предотвращения создания дополнительных strong
Ссылки. Объект, который больше не имеетstrong
ссылки будут удалены.
В некоторых средах есть дополнительные варианты слабых ссылок, таких как "мягкий", "без владельца", "фантом", которые имеют очень специфические значения в этих средах.