2011-03-04 71 views
1

我的應用程序提供了在設備上,而不是在simulator.I儀器採用低內存崩潰,我認爲,問題出在下面的部分內存泄漏導致應用程序崩潰

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

     [button setBackgroundImage:[UIImage imageNamed:@"gembtnblu.png"] forState:UIControlStateNormal];<br> 

     button.frame = CGRectMake(0, 0, TOOLBAR_BUTTON_WIDTH , TOOLBAR_BUTTON_HEIGHT);<br> 

     [button setTitle:[NSString stringWithFormat:@"%c",choice] forState:UIControlStateNormal];<br> 

     [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 

     [button addTarget:self action:@selector(ChoiceButtonTouched:) forControlEvents:UIControlEventTouchUpInside]; 

     [button setTag:choice]; 

     UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

     //Add button to the array 
     [tempItems addObject:customBarItem]; 

     if (isReviewing == TRUE) { 
      customBarItem.customView.userInteractionEnabled=FALSE; 
     } 
     //release buttons 
     [customBarItem release]; 

     numberOfChoices++; 

,但林不能當場problem.Please幫助guuys,我已經beeen停留在此,現在天

繼承人一些代碼

NSArray *items=[[NSArray alloc] initWithArray:(NSArray *)tempItems];
[tempItems release];

//add array of buttons to toolbar 
[toolbar setItems:items animated:YES]; 
[self.view addSubview:toolbar]; 

靜態分析器說,這是一個潛在的'items'數組泄漏。但是如果我放入一個發佈聲明,應用程序崩潰

回答

0

您是否在將工具欄添加爲子視圖後才發佈工具欄?如果你沒有,並且沒有釋放dealloc中的工具欄,那麼你的泄漏。

+0

是的,我的ID釋放工具欄 – humblePilgrim 2011-03-09 14:11:35

0

您創建的映像很大嗎?這可能是因爲你正在將一條巨大的消息加載到內存中,而不是釋放它。

我建議在此代碼上運行靜態分析器(構建和分析),這些錯誤應該可以幫助您瞭解不應該釋放的東西。

+0

圖像是一個小png.I使用靜態分析器,它告訴我,即時泄漏數組。但是當我釋放它時,應用程序在模擬器中崩潰。我的stuk因爲即時調試通過teamviewer和無法調試實際device.ill發佈更多代碼 – humblePilgrim 2011-03-04 14:41:58

+0

如果在您釋放數組時發生崩潰,那麼在您的程序完成使用之前,您可能會釋放它。嘗試將該版本稍後放入代碼中,或者將該數組附加到自動釋放池。 – Nicholas1024 2011-03-04 14:48:00

+0

自動發佈會在幾次發佈後讓它崩潰,而發佈會立即崩潰:-( – humblePilgrim 2011-03-04 14:52:34

0

您發佈的源代碼片段不包含內存管理錯誤。我在這裏假設你加載的圖片很小,因爲這是一個按鈕。請注意,imageNamed:緩存圖像,但假設圖像很小,這不是問題。

問題出在代碼的其他地方,或者您的設備上有太多的應用程序同時打開。注意應用程序在後臺運行:這些仍然在進食內存。嘗試關閉所有應用程序,並再次在設備上運行您的應用程序。查看執行相同代碼片段時是否遇到完全相同的行爲。

+0

是的,另一方的人關閉了所有其他應用程序並嘗試過。這實際上是一個測驗應用程序,按鈕用於輸入選項,每次單擊下一個按鈕時,按鈕都會重新加載。此時,儀器會記錄一次泄漏......它每次都會發生。 – humblePilgrim 2011-03-04 14:51:30

+0

等一下。泄漏可能不一定與您的代碼相關聯:它可能是一塊分配的內存在你正在鏈接的一個框架中,一些將在稍後發佈的東西。你是否檢查了泄漏是否實際上是指你的源代碼?儀器清楚地標記了每個泄漏塊屬於你的代碼(它甚至會告訴你泄漏源於何處)或庫/框架代碼 – 2011-03-04 23:29:29

0

在分配新按鈕和列表之前,您可能不會釋放舊按鈕和列表。也許你應該重新使用舊的按鈕,而不是創建新的類似按鈕。

+0

嗯。但不知道該怎麼做,因爲即時釋放所有創建的按鈕後,將它們添加到工具欄 – humblePilgrim 2011-03-04 15:08:23

+0

您是否正在釋放舊的工具欄及其中的按鈕? – hotpaw2 2011-03-04 15:10:41

+0

只是看着它。按鈕都釋放,工具欄是一個屬性。所以不能釋放它之間,或者我有內存管理的概念都是錯誤的? – humblePilgrim 2011-03-04 15:23:43