Situation: La classe A (classe grand-parent) conserve la classe B (classe parente) et la classe B (classe parente) conserve la classe C (classe enfant) puis la classe B et la classe C cycle de rétention et provoquer des fuites de mémoire?Avons-nous un cycle de rétention lorsqu'une classe (milieu de la hiérarchie) est supprimée?
Répondre
Cela dépend de comment avez-vous Effacez la classe B.
Si je retirai la classe B alors ce qui se passerait
Que voulez-vous dire par là? Si vous utilisez ARC, vous n'êtes pas censé appeler le release
. Alors, comment avez-vous retiré la classe B alors? Étant donné que la classe A contient la référence forte à la classe B, le nombre de retenues de la classe B est 1. Maintenant, la seule façon de ramener le compte de réfrence de la classe B à 0 et de laisser l'ARC nettoyer la classe B référence de la classe B à zéro.
Ainsi, si dans la classe A si vous dites,
self.classBReference = nil;
Alors le nombre de références de classe B devient 0 et la classe B se évidemment désallouée et parce que la classe B sera désallouée le compte de référence de la classe C devient 0 parce que La classe C était fortement détenue par la classe B et la classe B n'existe plus. Par conséquent, la classe C devient le candidat à être retiré par ARC.
Proof Of Concept:
Voici ma déclaration de classe
class A {
var binstance : B? = B() //Declared as optional because I need to set the reference to nil later :)
deinit {
print("A deinited")
}
}
class B {
var cinstance = C()
deinit {
print("B deinited")
}
}
class C {
deinit {
print("C deinited")
}
}
Maintenant, je créer une instance de la classe A dans mon CV, suite A, B et C ont tous compte de référence de 1.
var ainstance : A = A()
Quand je mets le AINSTANCE à zéro est ici la séquence des appels
self.ainstance.binstance = nil
O/P
B deinited
C deinited
il ne sera pas détruit parce qu'il a compte de référence 1, car il est maintenu par une classe. il va donc créer un cycle de référence fort. Plus: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html – KKRocks