Dans quels cas est-il préférable d'utiliser unowned plutôt que weak dans la gestion de la mémoire?
sobes.tech IA
Réponse de l'IA
En Swift, weak et unowned sont utilisés pour éviter les cycles de références fortes, mais s'appliquent dans des situations différentes :
-
weakest une référence optionnelle qui devient automatiquementnillorsque l'objet référencé est libéré. Elle est utilisée lorsque la référence peut devenirnilau cours de la vie de l'objet. -
unownedest une référence non optionnelle qui suppose que l'objet référencé existera toujours pendant l'utilisation de cette référence. Si l'objet est libéré, accéder àunownedprovoquera une erreur à l'exécution.
Il est préférable d'utiliser unowned lorsque :
- La référence doit toujours pointer vers un objet existant (par exemple, un objet parent qui vit plus longtemps que l'enfant).
- Vous êtes sûr que la durée de vie de l'objet référencé n'est pas plus courte que celle de la référence.
Exemple :
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)
Ici, CreditCard a une référence unowned à Customer, car la carte ne peut pas exister sans le client, et le client vit plus longtemps que la carte.