2012-03-05 39 views
0

我試圖其中一個對象被釋放了太多次,然後由事件循環釋放到調試問題。下次嘗試從對象中讀取時,應用程序會與EXC_BAD_ACCESS一起崩潰。儀表不顯示我真正的引用計數

要調試,我讓NSZombies,然後使用與儀器的殭屍輪廓。然後我到了那裏我的應用程序崩潰和儀器告訴我有關消息被髮送到一個釋放的實例點。到現在爲止還挺好。

它向我展示了UIKit等庫在哪裏釋放並保留指向我的對象的指針,但它不會告訴我我自己的代碼在哪裏執行此操作。它也沒有顯示真實的參考計數。由該儀器表示,引用計數是1時,引用計數實際上是8根據在gdb打印出的引用計數。

我調查了儀器過濾輸出的可能性,但它似乎是我真的記錄每個版本並保留事件。這是絕對必須的東西在我的應用程序,因爲我的視圖控制器顯示,這意味着試圖做任何會發送消息到控制器將崩潰之後立即釋放。

在dealloc方法中放置了一個斷點之後,我發現我的對象確實被事件循環解除了分配,所以這不是一個流氓調用dealloc的情況。

+2

後的代碼,你正在實例化ViewController。 – 2012-03-05 18:59:53

回答

1

你不能依賴引用計數爲蘋果公司的框架類可以守住自己的引用你的對象。調試的參考計數沒有意義。

+0

確實。就我所見,我已經看到很多隻有一兩個物體的物體。但在幕後,你會獲得更多,特別是在裝備時。但即使沒有儀器,計數也往往比你想象的要高得多(但絕不低於)。 – 2012-03-05 18:54:35

+0

這兩個數字當然應該匹配? Instruments是否未在Apple框架內部看到發佈和保留內容?你知道爲什麼Instruments沒有記錄我的軟件發佈和保留的呼叫嗎? – 2012-03-05 19:07:20

+0

我在幾個小時後解決了這個問題,但忘記了更新 - 事實證明,實際上我已經將我的文件的所有者設置爲我自定義的ViewController,並將nib中的TableViewController設置爲相同的ViewController,因此我感到困惑。這最終創建了相同ViewController的兩個實例;其中一個在下一次事件循環運行時迅速被吃掉。然而,用戶界面中的所有操作都附加到了這個現在已解除分配的實例上,因此崩潰了。感謝您花時間閱讀和回答我的問題,並在我身上享受美味。 – 2012-04-07 19:01:33

0
  1. 單擊第(i)離開的分配,圖
  2. 集 「記錄的引用計數」
  3. 你完成了;)

Activate reference count