Слабке я є концепція ARC, яка в основному використовується для уникнення циклу збереження. Якщо ви безпосередньо використовуєте self, це створює надійне посилання та не буде видалено з пам’яті. Отже, об’єкт, який містить змінну, залишиться живим і призведе до витоку пам’яті. 19 квітня 2021 р.
`[слабе я]` фіксує слабке посилання на `self` для використання в межах закриття. Якщо `self` звільнено, то посилання стає нульовим. Існує також `[unowned self]`, який також фіксує слабке посилання, але неявно розгортає `self`.
[self] вказує на те, що self навмисно утримується з сильним посиланням (тому деякий синтаксис спрощено). [weak self] вказує на те, що self утримується зі слабким посиланням. Ви скористаєтеся цим, якщо знаєте, що контрольного циклу немає, або якщо хочете, щоб був тимчасовий контрольний цикл.
Підсумовуючи, використовуйте `weak`, коли об’єкт, на який посилається, може стати `nil` протягом життєвого циклу об’єкта, на який посилається, і використовуйте `unowned`, коли ви можете гарантувати, що об’єкт, на який посилається, переживе об’єкт, на який посилається.
Сильне посилання означає, що об’єкт не буде звільнено, поки існує принаймні одне сильне посилання на нього. З іншого боку, слабке посилання не перешкоджає звільненню об’єкта. Якщо об’єкт має лише слабкі посилання, його буде звільнено.
Потрібне лише використання [weak self]. в ситуаціях, коли сильне захоплення себе призведе до циклу утримання, наприклад, коли self фіксується всередині закриття, яке також остаточно зберігається тим самим об’єктом.