Sobes.tech
Junior

Mi az a weak memória módosító Swiftben?

sobes.tech MI

Válasz az MI-től

A weak módosító arra szolgál, hogy megszakítsa az erős hivatkozási ciklusokat objektumok között, amikor egy objektumnak erős hivatkozása van egy másikra, és ez utóbbi viszont erős hivatkozással rendelkezik vissza.

A weak fő jellemzői:

  • Nem növeli a hivatkozási számlálót: A weak használata nem növeli az erős hivatkozások számát az objektumon.
  • Lehet nil: A gyenge hivatkozás opcionális (Optional), és automatikusan nil lesz, amikor az arra hivatkozott objektum deinitializálódik.
  • Szülő/gyermek kapcsolatokhoz használják: Gyakran alkalmazzák, amikor egy gyermekobjektumnak van hivatkozása a szülőre, hogy elkerüljék az erős hivatkozási ciklusokat.
  • var-ként kell deklarálni: Mivel a gyenge hivatkozás nil-vé válhat, változóként (var) kell deklarálni, nem pedig konstansként (let).

Használati példa:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("\(name) inicializálódik")
    }

    deinit {
        print("\(name) deinitializálódik")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Gyenge hivatkozás

    init(unit: String) {
        self.unit = unit
        print("Lakás \(unit) inicializálódik")
    }

    deinit {
        print("Lakás \(unit) deinitializálódik")
    }
}

Apartment osztályban weak var tenant: Person? nélkül erős hivatkozási ciklus alakulna ki, és a Person és Apartment példányok nem kerülnek deinitializálásra, amikor már nem mutatnak rájuk más erős hivatkozások. A weak-nek köszönhetően, amikor a Person példány deinitializálódik, a tenant hivatkozás az Apartment példányban automatikusan nil lesz.