Следующий ответ для случая, когда нет сборки мусора (например, на iOS).В случае сборки мусора, на самом деле есть ключевое слово (__weak
) для создания слабой ссылки.
«Слабая» ссылка - это ссылка, которую вы не сохраняете.
Вынужно использовать эти слабые ссылки, чтобы разбить циклы.Типичным случаем является дочерний объект, которому нужна ссылка на его родительский объект.В этом случае родительский объект сохраняет ссылку на дочерний объект, а дочерний объект имеет ссылку на своего родительского объекта, но не сохраняет ее.Это работает, потому что дочерний объект должен существовать столько, сколько существует родительский объект.
Является ли слабая ссылка ссылкой на автоматически выпущенное сообщение?
Не совсем, это будет "очень слабая ссылка"; -)
Функция автоматического освобождения исчезает, когда стек вызовов разматывается (например, в конце каждого цикла событий).Если вам нужно, чтобы что-то было менее временным, вам нужно сохранить ссылку (или, как в случае выше, убедитесь, что какая-то другая часть сохраняет это в достаточной мере).