2014-08-29 40 views
-1

ARC view in instrumentiOS的非零在ARC引用計數,不能的dealloc

大家好

我想要的dealloc一個視圖控制器在ARC模式。 但是,RefCount始終爲非零。

我試圖設置所有對象爲零和所有子視圖removeFromSuperview + nil; 和計時器無效+零; 仍然計數器= 2;

有沒有辦法跟蹤哪個指針仍然保留?

謝謝

回答

2

如果您正在使用塊,您可能還會在那裏創建保留循環。例如。一個塊被一個對象引用,並且在這個塊內引用對象或調用對象的實例方法。 保留計數不下降爲0的另一個選項是您已將註冊的abject註冊爲通知的觀察者。

您可能會發現這個答案有幫助:從蘋果文檔很強的參考週期的 https://stackoverflow.com/a/12286739/2261423

例子:

self.block = ^{ 
     [self doSomething]; // capturing a strong reference to self 
           // creates a strong reference cycle 
    }; 
+0

是的,這可能是問題,我已經做了很多塊之間...有沒有任何快速搜索找出哪個塊保留控制器? – MobileDev 2014-08-29 14:05:12

+0

這是您在對象中保留引用的塊。它很好地顯示在蘋果文檔中:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html「捕捉自我時避免強參考循環」 self.block =^{自己做的東西]; //捕捉對自己的強烈引用 //創建一個強大的引用循環 }; – tsr 2014-08-29 14:20:24

+0

如果存在block的保留週期,編譯器會發出警告。 – kelin 2014-08-29 15:10:08

-1

@比利,你爲什麼要這樣做?使用ARC時您可能不擔心取消分配。控制器將自動解除分配,此時將不會有參考文獻的控制器。是的,意見不涉及控制器,他們是由它引用!因此,刪除該視圖不會影響控制器的保留計數。如果您確實想從內存中刪除View Controller,請將其從父視圖控制器中刪除,並將所有鏈接設置爲「無」。

+0

感謝意見。由於內存保持高位,我想釋放內存,因此我試圖在dealloc中放置一個斷點,並且它不知道怎麼調用。這意味着我有一些指向控制器的「隱藏」指針。這是很難找到全部...... – MobileDev 2014-08-29 14:00:00