Junior — Middle
Millistel juhtudel on eelistatav kasutada unowned asemel weak'i mäluhalduses?
sobes.tech AI
Vastus AI-lt
Swiftis kasutatakse weak ja unowned, et vältida tugevaid viidete tsükleid, kuid need rakenduvad erinevates olukordades:
-
weakon valikuline viide, mis automaatselt muutubnil, kui viidatud objekt vabastatakse. Seda kasutatakse siis, kui viide võib objekti eluea jooksul muutudanil-iks. -
unownedon mitte-valikuline viide, mis eeldab, et viidatud objekt eksisteerib alati selle viite kasutamise ajal. Kui objekt vabastatakse, põhjustabunowned-ile juurdepääs jooksva veaga.
Soovitatav on kasutada unowned, kui:
- Viide peab alati osutama olemasolevale objektile (näiteks vanemobjekt, mis elab kauem kui laps).
- Olete kindel, et viidatud objekti eluea pikkus ei ole lühem kui viite eluaeg.
Näide:
class Customer {
let name: String
var card: CreditCard?
init(name: String) {
self.name = name
}
}
class CreditCard {
let number: UInt64
unowned let customer: Customer
init(number: UInt64, customer: Customer) {
self.number = number
self.customer = customer
}
}
let john = Customer(name: "John Appleseed")
john.card = CreditCard(number: 1234_5678_9012_3456, customer: john)
Siin on CreditCard omanik unowned viide Customer-ile, sest kaart ei saa eksisteerida ilma kliendita, ja klient elab kauem kui kaart.