Sobes.tech
Junior — Middle

Meg tudná magyarázni, mit jelent a gyenge hivatkozás használata a self-re a zárványokban?

sobes.tech MI

Válasz az MI-től

iOS (Swift) környezetben záradékokban (closures) self-re való gyenge hivatkozás (weak reference) használata segít elkerülni a tartási ciklusokat (retain cycles), amelyek memória szivárgáshoz vezetnek. Amikor egy záradék erős hivatkozásként fogja meg self-t, és self tartalmazza ezt a záradékot, akkor egymást tartják, és a memória nem szabadul fel.

Példa:

class MyClass {
    var closure: (() -> Void)?

    func setup() {
        closure = { [weak self] in
            guard let self = self else { return }
            self.doSomething()
        }
    }

    func doSomething() {
        print("Action")
    }
}

Itt a [weak self] azt jelenti, hogy a záradékon belül self gyenge hivatkozás lesz, és ha az objektum megsemmisül, a hivatkozás nil lesz, ezáltal megelőzve a memória szivárgását.