2012-02-03 93 views
0

我有一個具有5個對象數組的應用程序。這些對象都是自定義類。循環的下一次迭代以及在對臨時數組進行一些修改之後,我使用isEqualToArray運行檢查以查看這些值是相同還是不同。但是,一分鐘我得到一個EXC_BAD_ACCESS。有什麼我需要在課堂上實施,以防止這種情況發生。isEqualToArray與自定義類崩潰

沒有泄露太多信息,自定義類只存儲5個NSString*變量。

+0

你能提供示例代碼嗎?附:如果您爲數組啓動循環並修改該數組,則可能會崩潰。換句話說,當你循環它時你不能修改數組。 – 2012-02-03 21:03:04

回答

0

聽起來就像你的NSString變量已經被釋放,你的訪問不良內存。

您是否將它們從陣列中移除?或者你可能使用autorelease語義創建它們,將它們放入數組中,然後釋放它們呢?

也許發佈一些更多的代碼,我們可以告訴你到底發生了什麼問題,但很可能已經發布了。

你可以打開NSZombieEnabled來查看到底是什麼'嚴重訪問'

+0

你說得對。在將它添加到數組後,我確實釋放了該對象。我認爲它遵循與添加視圖到子視圖相同的佈局。一旦你添加它,你會立即釋放它。我猜這同樣是不正確的NSMutableArrays – Seb 2012-02-03 21:11:42

+1

這與容器的類型無關,無論它是一個UIView或NSMutableArray。這是關於如何創建對象和所有權。您只能在您擁有的對象上調用發佈。如果你使用alloc,copy,new,retain獲得它,你只擁有一個對象。所以當你創建你的UIView時,你可能使用了alloc:initWithFrame:所以你擁有它,並且必須調用release。當你創建NSString時,你可能使用了一個方便的自動釋放方法,比如你不擁有的stringWithFormat,所以不要調用它。再次查看內存規則(或使用ARC)。 – bandejapaisa 2012-02-03 22:27:52