Sobes.tech
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 бъде унищожен преди изпълнението на затварянето, то няма да го задържа в паметта, което предотвратява теч.