В Swift типы ссылок используют Automatic Reference Counting (ARC) для управления памятью. Три типа ссылок — strong, weak и unowned — отличаются тем, как они влияют на время жизни объекта, безопасность и опциональность.
strong ссылка — это значение по умолчанию в Swift. Она увеличивает счётчик ссылок ARC, сохраняя объект в памяти, пока существует хотя бы одна сильная ссылка на него. Чрезмерное использование сильных ссылок между объектами может вызвать retain cycles, приводящие к утечкам памяти.
weak ссылка не увеличивает счётчик ссылок. Когда ссылаемый объект удаляется из памяти, ссылка автоматически обнуляется. По этой причине слабые ссылки всегда должны быть объявлены как опциональные:
weak var delegate: MyDelegate?
Используй weak для делегатов, замыканий и отношений родитель-потомок или потомок-родитель, где обе стороны могут независимо освобождаться из памяти.
unowned ссылка также не увеличивает счётчик ссылок, но в отличие от weak, она является неопциональной. Обращение к unowned-ссылке после того, как объект был удалён из памяти, вызовет краш во время выполнения:
unowned let owner: Owner
Используй unowned только когда ты уверен, что ссылаемый объект всегда будет жить дольше, чем объект, содержащий ссылку.
strong по умолчаниюweak для делегатов и чтобы разорвать retain cycles в замыканияхunowned как более производительную альтернативу weak только когда время жизни ссылки гарантированоСильные ссылки (strong references) увеличивают счетчик ссылок ARC, что означает, что объект с хотя бы одной сильной ссылкой на него не будет удален.
Новый — ещё не проверен сообществом
Вы