Junior — Middle
Kako i u kojim slučajevima se koriste slabe reference unutar zatvarača?
sobes.tech АИ
Одговор од АИ
У iOS-у, када радите са closures, често се јавља проблем цикличних референци, када објекат ухвати closure, а closure ухвати објекат, што доводи до цурења меморије. Да бисте то избегли, користите слабе референце (weak references) унутар closure-ова.
Слаба референца не повећава број референци на објекат, тако да ако нема јаке референце, објекат може бити ослобођен.
Пример коришћења слабе референце унутар closure-а:
class ViewController {
var completionHandler: (() -> Void)?
func setup() {
completionHandler = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Акција извршена")
}
}
Случајеви употребе:
- Када closure ухвати self или друге објекте да избегне циклус задржавања.
- У асинхроним операцијама, где објекат може бити уништен пре извршавања closure-а.
Користећи слабе референце помаже у управљању меморијом и спречавању цурења.