簡體   English   中英

iPhone應用程序由於內存不足而崩潰,但在模擬器中工作正常

[英]iphone app crashes due to Low Memory but works fine in simulator

親愛的所有人,我有一個基於導航的應用程序,帶有大約60個UIControllerViews,分為4個部分。

我已經執行以下操作:1.構建和分析:bulid成功,沒有任何抱怨。 2.儀器分配和泄漏:無泄漏。

但是,該應用程序在iPhone或iPad上崩潰了,但在模擬器中運行良好。 沒有崩潰報告,但是我在crashreporter文件夾中確實看到LowMemory.log。

我已將iPhone和iPad升級到4.2

有誰知道可能出什么問題? 我已經閱讀和故障排除了一個星期。

是否需要刪除/釋放UIControllerViews? 只需在視圖之間導航即可使應用程序崩潰。

感謝您的任何幫助。

我的應用程序有一個名為contentViewController的根視圖,用戶可以從此處導航到4個測驗。

這是我用來返回到根視圖的代碼。

- (void)goHome {
UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle: @"Warning"
                      message: @"Proceed?"
                      delegate: self
                      cancelButtonTitle:@"Yes"
                      otherButtonTitles:@"No",nil];
[alert show];
[alert release];

}

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
[[self navigationController] setNavigationBarHidden:NO animated:YES];
if (buttonIndex == 0) {
    NSArray * subviews = [self.view subviews];
    [subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    self.view = nil;
    if (self.contentViewController == nil)
    {
        ContentViewController *aViewController = [[ContentViewController alloc]
                                                  initWithNibName:@"ContentViewController" bundle:[NSBundle mainBundle]];
        self.contentViewController = aViewController;
        [aViewController release];
    }
    [self.navigationController pushViewController:self.contentViewController animated:YES]; 
}
else {
}

}

該模擬器不會為您提供有關內存警告的任何有用信息,您的應用在此運行,可以有效訪問系統願意提供的所有內存。 該設備是您需要測試內存使用情況的地方,如果您收到警告和崩潰的信息,那么您需要做一些文書工作以弄清楚您可以在哪里釋放部分內存。

查看您的xcode控制台。 如果收到大量內存不足警告,則需要動態分配和取消分配視圖,因為它們占用了設備過多的內存(模擬器的內存並不十分有限)。

但這可能是造成您崩潰的其他原因之一。 確保您正在執行調試構建(打開斷點),以便調試器啟動,並希望您可以看到崩潰發生在堆棧中的哪個位置。

您已經有了一些好的建議。 但是,我建議您花大量時間復查XCode的調試工具文檔。 這樣您就可以基本了解它們的功能以及如何使用它們。 在此之后,可以閱讀有關iOS內存管理,自動釋放池等的內容。

對於您的應用程序,您需要意識到iOS設備上沒有交換空間。 因此,您不得不在其他平台上無法達到的程度來管理內存。 通常,這意味着您可以避免在內存中保留過多的查看數據。

對於當前的iPad,該應用程序可能只有約110MB的可用RAM。 具體數字可能取決於iOS版本。 無論如何,您都需要了解各種視圖的數據結構(在內存中)的大小。 根據內存使用情況,可能會大量考慮60種不同的視圖,如果管理不正確,可能很快就會用完。 這不像用Java或其他垃圾收集語言進行編程。

最后; 即使這聽起來像是內存管理問題,也可能總是其他原因。 如果仍然有問題,則需要發布代碼。 現在,真的是我們的工作了。 請記住,您沒有虛擬機,也沒有垃圾回收。

您正在用完內存,請始終記住如果分配內存,則必須釋放它,在某些情況下,您可以使用自動釋放,這樣您就不會忘記在void dealloc方法結束之前釋放它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM