2010-01-08 43 views
3

我已經越來越EXC_BAD_ACCESS在一些設備中特設測試我的應用程序在這裏看到: Help debugging iPhone app - EXC_BAD_ACCESS在這裏過度放棄?

我已成功地使用ATOS -arch的ARMv6 -o myapp.app/myapp 0x000037a6 在終端追查方法是造成這個問題,這是導致我這段代碼:

for (UIView *view in scrollView.subviews) { 
    [view removeFromSuperview]; 
} 

我懷疑應用程序正在接收內存訪問警告,並釋放滾動視圖或UIImageViews的這是它的孩子,所以當我使用上面的方法,它會導致錯誤(和崩潰),因爲它正在過度釋放視圖。

我的問題是,我怎麼能使這個安全,所以它只發布,如果它還沒有被釋放?

回答

6

您在迭代數組時正在修改數組。這很微妙,但因爲removeFromSuperview將它從子視圖列表中刪除,所以您正在更改該數組。改變你的代碼到這個,

NSArray *subviews = [scrollView.subviews copy]; 
for (UIView *view in subviews) { 
    [view removeFromSuperview]; 
} 
[subviews release]; 

你應該沒問題。

+0

謝謝,我會試試看。任何想法,如果我的舊代碼有時可以在某些設備上正常工作,而不是其他人?我看到的問題僅僅是因爲內存警告可能與已發佈的內容和已發佈的內容混爲一談而發生的問題?因爲舊代碼在我的設備上工作正常 - 當然這並不意味着它是正確的:) – 2010-01-08 00:21:57

+0

老實說,我認爲* Cocoa會爲舊代碼所做的事情拋出一個快速失敗的例外。 EXC_BAD_ACCESS可能來自其他地方。 – benzado 2010-01-08 00:26:55

+0

Hrm。那麼我已經改變了這段代碼,它肯定不會比以前更糟糕,但是我需要爲我的朋友做另一個臨時發佈,以查看他是否仍然獲得EXC_BAD_ACCESS。舊代碼在我的設備上肯定可以正常工作 - 在這種情況下,頑皮的可可。謝謝您的幫助。看起來我對EXC_BAD_ACCESS沒有任何想法,因爲終端指向我的魔術方法就是這一切 – 2010-01-08 00:30:34