2010-07-06 67 views
1

任何人都可以用Objective-C中創建的無效對象指導我。我正在開發iPhone SDK。我看到應用程序中創建的無效對象會導致應用程序崩潰。Objective-C無效對象

這裏是它的外觀

alt text http://img816.imageshack.us/img816/9208/picture1z.png

,其中作爲在日誌中我得到計劃接收信號的屏幕截圖:「EXC_BAD_ACCESS」。

我需要以下方面的幫助。

  • 它們是如何創建的。
  • 如何防止它們。
  • 如何檢測它們。

回答

2

該錯誤表示您向已發佈的對象發送了消息(換句話說,某個對象的保留計數已達到零,因此您在某處過度釋放該對象)。在Xcode中,您可以在Debug環境中將NSZombieEnabled設置爲YES;這會使得釋放對象應該釋放,然後當一個零計數對象被消息發送時,調試器應該中斷,你會得到一個日誌條目,顯示什麼對象被過度釋放以及你的通常的調用堆棧等等。

確保只有在您嘗試查找過度釋放的對象時才使用NSZombie。

+0

當存儲在數組中的對象失效時,就會出現問題,如圖所示,我正在使用應用程序委託共享數組。 – Ameya 2010-07-06 06:24:13

+0

如何處理需要重新初始化的分配的實例,如if(notes == nil)notes = [[NSMutableArray alloc] init];其他{[筆記保留]; notes = [[NSMutableArray alloc] init];} – Ameya 2010-07-06 06:32:25

+0

'else {[notes release],notes = nil; notes = [[NSMutableArray alloc] init]; }' – 2010-07-06 06:53:40

0

我看不到你的屏幕截圖,但是當你訪問一個通常在你使用它之前發佈的對象時,會給你EXC_BAD_ACCESS。你不能真正阻止編碼,它發生在我們所有人在某個點或另一個點。你只需要學習如何找到訪問該對象的代碼並學會修復它。

打開NSZombies你將不得不調試你的應用程序。谷歌如何使用NSZombies,這應該可以幫助你找到你的問題。