Мы используем файлы cookie
Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
Нет, не всегда.
Используем weak
или unowned
в Capture List для предотвращения retain cycles.
Retain cycle возникает, когда два или более объекта сильно ссылаются друг на друга, не позволяя памяти быть освобожденной.
Использовать weak
или unowned
нужно, когда замыкание сильной ссылается на self
(или другую переменную экземпляра класса/актора), и в свою очередь self
(или другой объект) имеет сильную ссылку на это замыкание.
Примеры ситуаций, где это необходимо:
Если замыкание не захватывает self
(или другую переменную класса/актора, которая имеет сильную ссылку на замыкание), или захватывает структурные типы/перечисления, использование weak
или unowned
не требуется.
Разница между weak
и unowned
:
Тип | Описание | Когда использовать |
---|---|---|
weak | Слабая (опциональная) ссылка. Может стать nil . | Когда жизненный цикл замыкания короче или равен жизненному циклу захватываемого объекта, и объект может стать nil до завершения замыкания. |
unowned | Неосновная (неопциональная) ссылка. Не может стать nil . | Когда жизненный цикл замыкания короче или равен жизненному циклу захватываемого объекта, и гарантировано, что объект будет существовать до завершения замыкания. Если объект освободится до выполнения замыкания, произойдет краш (unowned reference to deallocated instance). |
Пример использования weak
в Capture List:
swift
Нет, не всегда.
Используем weak
или unowned
в Capture List для предотвращения retain cycles.
Retain cycle возникает, когда два или более объекта сильно ссылаются друг на друга, не позволяя памяти быть освобожденной.
Использовать weak
или unowned
нужно, когда замыкание сильной ссылается на self
(или другую переменную экземпляра класса/актора), и в свою очередь self
(или другой объект) имеет сильную ссылку на это замыкание.
Примеры ситуаций, где это необходимо:
Если замыкание не захватывает self
(или другую переменную класса/актора, которая имеет сильную ссылку на замыкание), или захватывает структурные типы/перечисления, использование weak
или unowned
не требуется.
Разница между weak
и unowned
:
Тип | Описание | Когда использовать |
---|---|---|
weak | Слабая (опциональная) ссылка. Может стать nil . | Когда жизненный цикл замыкания короче или равен жизненному циклу захватываемого объекта, и объект может стать nil до завершения замыкания. |
unowned | Неосновная (неопциональная) ссылка. Не может стать nil . | Когда жизненный цикл замыкания короче или равен жизненному циклу захватываемого объекта, и гарантировано, что объект будет существовать до завершения замыкания. Если объект освободится до выполнения замыкания, произойдет краш (unowned reference to deallocated instance). |
Пример использования weak
в Capture List:
swift
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.