Sobes.tech
Junior — Middle

Je možné implementovať slabé uzávery v programovacom jazyku?

sobes.tech AI

Odpoveď od AI

V iOS (Swift, Objective-C) sú uzávierky (closures) zvyčajne pevne spojené s kontextom, v ktorom boli vytvorené, zachytávajúc premenné a objekty. Avšak je možné implementovať slabšie spojené uzávierky pomocou slabých odkazov (weak) vo vnútri uzávierky, aby sa predišlo silným cyklom udržiavania.

Príklad v Swift:

class MyClass {
    var value = 10
    func doSomething() {
        let closure: () -> Void = { [weak self] in
            guard let self = self else { return }
            print(self.value)
        }
        closure()
    }
}

Tu je self zachytené slabým odkazom, čo umožňuje vyhnúť sa udržiavaniu objektu MyClass uzávierkou, ak bol objekt už uvoľnený.

Takže, slabšie spojené uzávierky sú možné a široko používané na správu pamäti a prevenciu únikov.