2011-12-16 46 views
0

這已經殺了我。因爲它的內存管理問題......EXEC_BAD_ACCESS釋放複製的對象

當我有一個NSArray的創建,像這樣在說2級

@property (nonatomic, copy) NSArray * sourceArray; 

我設置來自另一個班級的數組說類似1 ...

Class2 = [[Class2 alloc] initWithFrame:self.bounds]; 
[Class2 setSourceArray:self.namesArray]; 

我在哪裏肯定self.namesArray包含對象。

當我發佈1級,它會釋放2類,因爲2級爲1級子視圖預計,但我得到的時候2級釋放sourceArray在像這樣的dealloc的EXEC_BAD_ACCESS ...

[sourceArray release]; 

,如果我沒有在1級釋放namesArray我沒有得到這個錯誤..因爲我用我宣佈sourceArray的副本就我所知,給二級自己的數組的版本,這是沒有意義的......

誰能幫助我在這裏?這太痛苦了!

更多信息: 我嘗試發佈sourcearray之前的引用計數是1 ...因此,爲什麼發佈版本不起作用?

+1

您是否嘗試過通過使用儀器殭屍工具診斷您的問題? – DBD 2011-12-16 03:41:21

+0

不要在Class2中釋放陣列,可你使用這個數組包含class1的 – Anand 2011-12-16 03:45:31

回答

0

,因爲我使用的是沒有意義的,我宣佈sourceArray爲 副本據我所知給出2級了自己的數組版本。

這就是主意,但它可能會幫助您知道-copy通常只保留不可變對象的對象。這對你的代碼無關緊要,因爲原始代碼與不可變對象的副本是無法區分的。可能是因爲您在Class1中過度釋放了該數組,並且該問題僅在Class2釋放數組的「複製」時才顯示。