2011-12-03 62 views
0

在查看對象調用removeFromSuperview時碰到的問題。所述分配歷史(根據儀器)如下:目標C的方法被髮送到解除分配對象

MyView的的alloc - > MyView的1

addSubview:MyView的 - > MyView的2

MyView的釋放 - > MyView的1

MyView的removeFromSuperview - > MyView的0

MyView的的dealloc - > MyView的-1(由removeFromSuperview調用)

我明白因爲引用計數達到0,所以調用dealloc方法。但是,我不明白爲什麼它將引用計數減1,導致消息被髮送到釋放方法。

此外,我只能使用儀器檢測它。使用Xcode它不會崩潰。

任何幫助將非常感激。 非常感謝。

+0

你手動調用最後'MyView的dealloc',或者它被'removeFromSuperview'調用? – Paul

+0

正被removeFromSuperview調用。 –

+0

您是否嘗試過您的應用程序,而不先釋放myView,因此它的計數仍然是2?我認爲'removeFromSuperview'會自動處理額外的'alloc'。 – Paul

回答

1

另一種非常簡單的方法找到引用計數問題和Xcode是使用分析,編譯器現在是足夠聰明,實現自動引用計數,所以它也足夠聰明,找到引用計數問題。

+1

+1 heh,是啊,那也是=)我以爲明顯已經完成了。 – justin

0

理清這個問題了最簡單的方法通常是:

  • 運行的程序在儀器使用引用計數記錄啓用
  • 重現該問題
  • 執行將停止
  • 那麼你分析引用計數的歷史,並找到不當遞減史上

一旦你掌握了它,定位殭屍大約需要2分鐘。

相關問題