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:
weakkasutamine ei suurenda objekti tugevaid viiteid. - Võib olla
nil: Võreviide on valikuline (Optional) ja muutub automaatseltnil, 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 muutudanil, 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.