Junior — Middle
Защо е препоръчително да се използва слаба препратка към себе си (weak self) в кода с затваряния?
sobes.tech AI
Отговор от AI
Използването на слаба препратка (weak self) в затварянията е необходимо за предотвратяване на цикли на силни препратки (retain cycles), които водят до течове на памет.
Когато затваряне улавя self като слаба препратка, а self съдържа това затваряне (например, в свойство), те се държат взаимно, и нито един от обектите не се освобождава.
Пример за използване на слаба препратка:
someAsyncCall { [weak self] in
guard let self = self else { return }
self.doSomething()
}
Тук self се улавя слабо, така че ако обектът self бъде унищожен преди изпълнението на затварянето, то няма да го задържа в паметта, което предотвратява теч.