Junior — Middle
Kokiais atvejais geriau naudoti unowned vietoj weak atminties valdyme?
sobes.tech AI
Atsakymas iš AI
Swift'e weak ir unowned naudojami stiprių nuorodų ciklų išvengimui, tačiau jie taikomi skirtingose situacijose:
-
weakyra pasirinktinė nuoroda, kuri automatiškai tampanil, kai nuoroda į objektą yra išlaisvinama. Ji naudojama, kai nuoroda gali taptinilobjekto gyvavimo metu. -
unownedyra nepasirinktinė nuoroda, kuri daro prielaidą, kad nuoroda į objektą visada egzistuos naudojimo metu. Jei objektas bus išlaisvintas, prieiga prieunownedsukels vykdymo klaidą.
Rekomenduojama naudoti unowned, kai:
- Nuoroda visada turi rodyti į esantį objektą (pavyzdžiui, tėvo objektas, kuris gyvena ilgiau nei vaikas).
- Esate tikras, kad nuorodos objekto gyvavimo trukmė nebus trumpesnė nei nuorodos gyvavimo trukmė.
Pavyzdys:
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)
Čia, CreditCard turi unowned nuorodą į Customer, nes korta negali egzistuoti be kliento, o klientas gyvena ilgiau nei korta.