2011-03-07 158 views
1

我在應用程序中收到EXC_BAD_ACCESS錯誤消息。基於一堆NSLog的,我已經能夠確定這是在檢查if語句的條件時造成的。我的if語句如下:EXC_BAD_ACCESS檢查語句條件?

if (([todaysDate compare:mostRecentDate] != NSOrderedSame) || (mostRecentDate == nil)) { 
    //Do Stuff 
} 

有人能告訴我爲什麼我可能會收到此錯誤嗎?

注:todaysDate和mostRecentDate是伊娃的,當你發送一條消息給已釋放的對象,它們會在代碼

+0

沒有足夠的保留這些變量? – Seyther 2011-03-07 22:42:58

回答

1

您的情況更可能是由於您的變量保留不足導致的。當您先前使用自動釋放對象而沒有保留該值時,這種情況尤其常見,因此您不擁有該對象,而是在運行循環的早期釋放該對象。

編輯: 由於您使用的是伊娃,你可以使用@property (retain)以確保您的伊娃正確保留,當您設置或使用retain關鍵字和處理自己的保留計數。

0

EXC_BAD_ACCESS引起設置不同的點。最有可能在你的代碼早些時候你釋放todaysDate或mostRecentDate而不將它們設置爲零,從而發送消息給釋放的對象。

0

EXC_BAD_ACCESS是一個操作系統級別的異常,說您試圖訪問不屬於您的應用程序的內存。這通常發生在對象過早放棄其所有權時(早期發送release),或者當您沒有明確擁有應該擁有的對象(使用retain)時。有幾件事情,你可以在這種情況下做的:

  1. 運行static analyser,這將有助於捕捉情況下,你已經忽略了memory management rules
  2. Enable zombies。這會告訴你是否嘗試將實例發送到釋放對象。