Sobes.tech
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-а.

Користећи слабе референце помаже у управљању меморијом и спречавању цурења.