Milyen esetekben érdemes az unowned-t használni a weak helyett a memória kezelésében?
sobes.tech MI
Válasz az MI-től
Swiftben a weak és unowned a erős hivatkozási ciklusok megelőzésére szolgál, de különböző helyzetekben alkalmazzák őket:
-
A
weakegy opcionális hivatkozás, amely automatikusannillesz, amikor a hivatkozott objektum felszabadul. Akkor használják, amikor a hivatkozás az objektum életciklusa soránnillehet. -
Az
unownedegy nem-opcionális hivatkozás, amely feltételezi, hogy a hivatkozott objektum mindig létezni fog a hivatkozás használata közben. Ha az objektum felszabadul, azunowned-hoz való hozzáférés futási hibát okoz.
Az unowned használata előnyösebb, amikor:
- A hivatkozás mindig egy létező objektumra mutat (például egy szülőobjektum, amely hosszabb ideig él, mint a gyermek).
- Biztos vagy benne, hogy a hivatkozott objektum élettartama nem lesz rövidebb, mint a hivatkozásé.
Példa:
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)
Itt a CreditCard rendelkezik egy unowned hivatkozással a Customer-re, mert a kártya nem létezhet ügyfél nélkül, és az ügyfél hosszabb ideig él, mint a kártya.