0
情況:A類(祖父類)保留B類(父類)和B類(父類)保留C類(孩子類),那麼如果我刪除B類,那麼會發生什麼,A類和C類是否有保留週期並導致內存泄漏?當一個班級(層級中)被刪除時,我們是否有一個保留週期?
情況:A類(祖父類)保留B類(父類)和B類(父類)保留C類(孩子類),那麼如果我刪除B類,那麼會發生什麼,A類和C類是否有保留週期並導致內存泄漏?當一個班級(層級中)被刪除時,我們是否有一個保留週期?
要看你怎麼去除B類
如果我刪除了B類,然後會發生什麼
你是什麼意思?如果您使用ARC,則不應撥打release
。那麼你是如何取消B班的?
由於A類持有的強引用B類,B類的保留計數爲1。現在,你可以把B級的refrence計數爲0,讓B圓弧清潔類的唯一途徑是通過設置強B類參考無。
所以,如果你的A類,如果你說,
self.classBReference = nil;
那麼B類的引用計數爲0,顯然B類被釋放並且由於B類被釋放的C類的引用計數爲0,因爲C級被B級牢牢佔據,B級不再存在。因此,C類現在成爲ARC要刪除的候選人。
概念證明:
這裏是我的班宣言
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")
}
}
現在我在VC創建類的實例,因此A,B和C都將具有引用計數1.
var ainstance : A = A()
當我設置AINSTANCE爲零這裏是電話
序列self.ainstance.binstance = nil
O/P
乙deinited
Çdeinited
它不會破壞,因爲它具有引用計數1,因爲它是由類保持。所以它會創建強大的參考週期。更多:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html – KKRocks