Sobes.tech
Junior

Mis on weak mälu modifikaator Swiftis?

sobes.tech AI

Vastus AI-lt

weak modifikatoru kasutatakse tugevate viidete tsüklite (reference cycles) katkestamiseks objektide vahel, kui üks objekt omab tugevat viidet teisele, ning see teine omakorda omab tugevat viidet tagasi.

weak peamised omadused:

  • Ei suurenda viidete loendurit: weak kasutamine ei suurenda objekti tugevaid viiteid.
  • Võib olla nil: Võreviide on valikuline (Optional) ja muutub automaatselt nil, kui sellele viitav objekt deinitialiseeritakse.
  • Kasutatakse vanema/lapse suhteks: Sageli kasutatakse, kui lapse objekt omab viidet oma vanemale, et vältida tugevaid viidete tsükleid.
  • Nõuab deklareerimist var-ina: Kuna võreviide võib muutuda nil, peab see olema muutuja (var), mitte konstant (let).

Näide:

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

    init(name: String) {
        self.name = name
        print("\(name) on initsialiseeritud")
    }

    deinit {
        print("\(name) on deinitialiseeritud")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Võreviide

    init(unit: String) {
        self.unit = unit
        print("Korter \(unit) on initsialiseeritud")
    }

    deinit {
        print("Korter \(unit) on deinitialiseeritud")
    }
}

Ilma weak var tenant: Person? Apartment klassis tekiksid tugevad viidete tsüklid ning Person ja Apartment eksemplarid ei deinitialiseeruks, kui neid enam ei hoita tugeva viitega. Tänu weak-ile muutub tenant viide nil-iks automaatselt, kui Person eksemplar deinitialiseeritakse.