2011-01-24 45 views
0

我遇到一個問題,以某種方式得到釋放的對象。我已經使用了各種調試技術,如使NSZombie等找到有問題的對象。它是一個簡單的NSMutable Array對象,我用它在分組的tableview中顯示我的節標題標題。它是從其中的標題標題是在函數返回的對象:對象神祕地得到釋放

- (的NSString *)的tableView:(UITableView的*)的tableView titleForHeaderInSection:(NSInteger的)部分

其中I返回上使用objectAtIndex值上面提到的對象。我已經確保它不會超出界限或任何東西。這個分組的tableView出現在我的自定義splitView控制器的左側。這一切在肖像模式下都可以正常工作,左側出現彈出窗口。沒有問題。在它作爲一張桌子出現的風景中,我有這個對象神祕地釋放自己。分割視圖首先出現沒有問題。然後我有一個模態的觀點來。當我放棄頂部的這個模態視圖時,部分頭對象會釋放神祕地撞擊試圖在模態關閉中出現的模態下的分割視圖。

任何指針或線索?

謝謝

+0

向我們展示您的變量聲明,屬性,使用的地方以及任何其他相關的代碼會有幫助。 – raidfive 2011-01-24 08:08:23

+1

顯示您的代碼! – Eiko 2011-01-24 08:47:36

回答

0

沒有代碼,它會很難找到問題。

崩潰是發生在真實的設備,模擬器還是兩者?您是手動保留/分配和釋放對象,還是將它放在自動釋放池中?

通常檢查您的viewDidUnload, viewWillDisappear, didReceiveMemoryWarning方法並確保您發佈的所有內容都是以適當的方法重新創建的。 如果您在多個視圖控制器中使用該數組,請確保在適當的點處保留並釋放它在每個視圖控制器中。

一個辦法,找出是誰在釋放陣列將是:

創建NSMutableArray的

的一個子類
@interface myNSMutableArray : NSMutableArray {} 
@end 

@implementation myNSMutableArray 
-(oneway void)release { 
    NSLog(@"Being released"); 
    NSLog(@"retainCount: %i", [self retainCount]); 
    [super release]; 
} 
@end 

更改你的神祕陣列來myNSMutableArray類型,2後增加一個破發點NSLog行以及調試器到達斷點時要求GDB進行回溯(bt命令)。

+0

感謝您的所有輸入。在代碼方面,除了它是一個在接口中聲明並在tableView的viewDidLoad中初始化的NSMutable數組之外,沒有什麼可以發佈的。我已經到處檢查並確保我不會釋放它。我甚至嘗試手動保留它。沒用。在模擬器上崩潰。而這個tableView是唯一使用這個對象的控制器。我已經嘗試了通常的alloc-init以及alloc-initWithArray,並確保我完全不釋放它並手動保留它。希望有所幫助。 – Bourne 2011-01-24 07:48:59

0

當你加載(或重新加載)你的數組時,你保留了它嗎?