Нет, не всегда.
Weak и unowned используются для предотвращения циклов сильных ссылок (retain cycles) в замыканиях, когда замыкание удерживает сильную ссылку на объект, а объект в свою очередь удерживает сильную ссылку на замыкание.
Использовать weak
или unowned
необходимо, когда замыкание захватывает сильную ссылку на self
или другой ссылочный тип, и существует вероятность возникновения цикла сильных ссылок.
Ситуации, когда не нужно использовать weak/unowned:
Выбор между weak
и unowned
:
weak
: Используется, когда захваченный объект может стать nil
в любое время до выполнения замыкания. Ссылка объявлена как опциональная (ObjectType?
). Требует проверки на nil
перед использованием.unowned
: Используется, когда известно, что захваченный объект всегда будет существовать на момент выполнения замыкания. Ссылка неопциональная (ObjectType
). Не требует проверки на nil
. Использование unowned
для объекта, который стал nil
, приведет к крашу (runtime error).swift
Нет, не всегда.
Weak и unowned используются для предотвращения циклов сильных ссылок (retain cycles) в замыканиях, когда замыкание удерживает сильную ссылку на объект, а объект в свою очередь удерживает сильную ссылку на замыкание.
Использовать weak
или unowned
необходимо, когда замыкание захватывает сильную ссылку на self
или другой ссылочный тип, и существует вероятность возникновения цикла сильных ссылок.
Ситуации, когда не нужно использовать weak/unowned:
Выбор между weak
и unowned
:
weak
: Используется, когда захваченный объект может стать nil
в любое время до выполнения замыкания. Ссылка объявлена как опциональная (ObjectType?
). Требует проверки на nil
перед использованием.unowned
: Используется, когда известно, что захваченный объект всегда будет существовать на момент выполнения замыкания. Ссылка неопциональная (ObjectType
). Не требует проверки на nil
. Использование unowned
для объекта, который стал nil
, приведет к крашу (runtime error).swift
Register or sign in to get access to full answers for all questions from the question bank.