大家好
我想要的dealloc一個視圖控制器在ARC模式。 但是,RefCount始終爲非零。
我試圖設置所有對象爲零和所有子視圖removeFromSuperview + nil; 和計時器無效+零; 仍然計數器= 2;
有沒有辦法跟蹤哪個指針仍然保留?
謝謝
大家好
我想要的dealloc一個視圖控制器在ARC模式。 但是,RefCount始終爲非零。
我試圖設置所有對象爲零和所有子視圖removeFromSuperview + nil; 和計時器無效+零; 仍然計數器= 2;
有沒有辦法跟蹤哪個指針仍然保留?
謝謝
如果您正在使用塊,您可能還會在那裏創建保留循環。例如。一個塊被一個對象引用,並且在這個塊內引用對象或調用對象的實例方法。 保留計數不下降爲0的另一個選項是您已將註冊的abject註冊爲通知的觀察者。
您可能會發現這個答案有幫助:從蘋果文檔很強的參考週期的 https://stackoverflow.com/a/12286739/2261423
例子:
self.block = ^{
[self doSomething]; // capturing a strong reference to self
// creates a strong reference cycle
};
@比利,你爲什麼要這樣做?使用ARC時您可能不擔心取消分配。控制器將自動解除分配,此時將不會有參考文獻至的控制器。是的,意見不涉及控制器,他們是由它引用!因此,刪除該視圖不會影響控制器的保留計數。如果您確實想從內存中刪除View Controller,請將其從父視圖控制器中刪除,並將所有鏈接設置爲「無」。
感謝意見。由於內存保持高位,我想釋放內存,因此我試圖在dealloc中放置一個斷點,並且它不知道怎麼調用。這意味着我有一些指向控制器的「隱藏」指針。這是很難找到全部...... – MobileDev 2014-08-29 14:00:00
是的,這可能是問題,我已經做了很多塊之間...有沒有任何快速搜索找出哪個塊保留控制器? – MobileDev 2014-08-29 14:05:12
這是您在對象中保留引用的塊。它很好地顯示在蘋果文檔中:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html「捕捉自我時避免強參考循環」 self.block =^{自己做的東西]; //捕捉對自己的強烈引用 //創建一個強大的引用循環 }; – tsr 2014-08-29 14:20:24
如果存在block的保留週期,編譯器會發出警告。 – kelin 2014-08-29 15:10:08