Junior
Qu'est-ce que le modificateur de mémoire weak en Swift?
sobes.tech IA
Réponse de l'IA
Le modificateur weak est utilisé pour briser les cycles de références fortes entre objets, lorsqu'un objet a une référence forte à un autre, et que celui-ci a également une référence forte en retour.
Caractéristiques principales de weak :
- N'augmente pas le compteur de références : L'utilisation de
weakn'augmente pas le nombre de références fortes à l'objet. - Peut être nil : La référence faible est optionnelle (
Optional) et devient automatiquementnillorsque l'objet référencé est désinitialisé. - Utilisé pour parent/enfant : Souvent appliqué lorsque l'objet enfant a une référence à son parent pour éviter les cycles de références fortes.
- Doit être déclaré comme
var: Étant donné que la référence faible peut devenirnil, elle doit être une variable (var), et non une constante (let).
Exemple d'utilisation :
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
print("\(name) est en cours d'initialisation")
}
deinit {
print("\(name) est en train d'être désinitialisé")
}
}
class Apartment {
let unit: String
weak var tenant: Person? // Référence faible
init(unit: String) {
self.unit = unit
print("Appartement \(unit) est en cours d'initialisation")
}
deinit {
print("Appartement \(unit) est en train d'être désinitialisé")
}
}
Sans weak var tenant: Person? dans la classe Apartment, il y aurait un cycle de références fortes, et les instances de Person et Apartment ne seraient pas désinitialisées lorsqu'elles ne sont plus référencées par d'autres références fortes. Grâce à weak, lorsque l'instance de Person est désinitialisée, la référence tenant dans l'instance de Apartment devient automatiquement nil.