繁体   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