unowned — это ключевое слово в Swift для объявления слабой ссылки. Используется, когда два объекта имеют сильную связь и их жизненные циклы зависят друг от друга, но мы хотим избежать циклических ссылок, которые могут помешать освобождению памяти.
Основные свойства и отличия от weak:
unowned ссылка гарантированно не будет nil на протяжении жизни объекта, на который она ссылается.unowned ссылка, освобождается из памяти до того, как ссылка будет использована, это приведет к крашу приложения (runtime error). Необходимо убедиться, что объект, на который ссылается unowned ссылка, существует дольше, чем сама ссылка.self, когда замыкание не захватывает сильную ссылку на self.Пример использования в замыкании:
swift
Пример использования для делегата (хотя weak чаще используется для делегатов, unowned тоже возможен, если делегат гарантированно живет дольше):
swift
Выбор между weak и unowned зависит от того, является ли ссылка опциональной и гарантированно ли существует объект, на который она ссылается, до конца жизни ссылки. Если есть вероятность, что объект может быть освобожден до использования ссылки, следует использовать weak. Если гарантия существования есть, и ссылка не должна быть опциональной, можно использовать unowned.