Junior — Middle
Kādās situācijās ir vēlams izmantot unowned vietā weak atmiņas pārvaldībā?
sobes.tech AI
Atbilde no AI
Swift valodā weak un unowned tiek izmantoti, lai novērstu stipro atsauces ciklu, bet tie tiek piemēroti dažādās situācijās:
-
weakir opcija, kas automātiski kļūst parnil, kad atsauce uz objektu tiek atbrīvota. To izmanto, ja atsauce var kļūt parnilobjekta dzīves laikā. -
unownedir ne-opcionāla atsauce, kas pieņem, ka objekts, uz kuru tā attiecas, vienmēr pastāvēs šīs atsauces izmantošanas laikā. Ja objekts tiek atbrīvots, piekļuveunownedradīs izpildes kļūdu.
Ieteicams izmantot unowned, kad:
- Atsauce vienmēr jānorāda uz esošu objektu (piemēram, vecāka objekts, kas dzīvo ilgāk nekā bērns).
- Esat pārliecināts, ka objekta dzīves ilgums nebūs īsāks par atsauces dzīves ilgumu.
Piemērs:
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)
Šeit, CreditCard ir ar unowned atsauci uz Customer, jo karte nevar pastāvēt bez klienta, un klients dzīvo ilgāk nekā karte.