Junior — Middle
V jakých případech je vhodnější použít unowned místo weak při správě paměti?
sobes.tech AI
Odpověď od AI
Ve Swiftu se weak a unowned používají k prevenci silných referenčních cyklů, ale jsou aplikovány v různých situacích:
-
weakje volitelná reference, která se automaticky nastaví nanil, když je objekt, na který odkazuje, uvolněn. Používá se, když může během života objektu dojít knil. -
unownedje nevolitelná reference, která předpokládá, že objekt, na který odkazuje, bude vždy existovat během používání této reference. Pokud je objekt uvolněn, přístup kunownedzpůsobí chybu za běhu.
Preferuje se používat unowned, když:
- Reference by měla vždy ukazovat na existující objekt (například rodičovský objekt, který žije déle než dítě).
- Jste si jisti, že životnost objektu, na který odkazujete, nebude kratší než životnost reference.
Příklad:
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)
Zde má CreditCard nevolitelnou referenci unowned na Customer, protože karta nemůže existovat bez zákazníka, a zákazník žije déle než karta.