2010-11-26 94 views
0

亲爱的所有人,我有一个基于导航的应用程序,大约有60个UIControllerViews,分为4个部分。由于内存不足导致iPhone应用程序崩溃,但在模拟器中正常工作

我用以下方法运行: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 { 
} 

}

+0

你是否推出推送后推送的视图控制器?如何推送视图控制器的代码示例将会很有帮助。 – 2010-11-26 00:20:01

+0

它会在相同的地方或每次不同的地方崩溃吗?在设备上调试时会崩溃吗?或只有在运行分离时? – MCannon 2010-11-26 01:02:14

回答

1

看看您的Xcode控制台。如果你得到一些低内存警告,那么你需要动态地分配和取消分配你的视图,因为它们占用了设备上太多的内存(模拟器没有受到内存限制)。

但它可能是大约一百万其他事情导致你的崩溃。确保你正在执行一个调试版本(打开断点),这样调试器就会启动,希望你能看到崩溃发生的位置。

3

模拟器不会给你任何有关内存警告的有用信息 - 你的应用程序在那里运行,有效地访问系统愿意给它的所有内存。该设备是您需要测试内存使用情况的地方,如果您收到警告和崩溃,则需要执行一些工具来确定可以释放部分内存的位置。

0

你有一些很好的建议。不过,我建议花大量时间阅读XCode的调试工具文档。这样你就可以基本了解他们的能力以及如何使用它们。随后阅读iOS内存管理,自动发布池等内容。

对于您的应用程序,您需要意识到iOS设备上没有交换空间。所以你不得不在其他平台上管理内存。通常这意味着如果可以避免的话,您不希望在内存中保留很多数据。

就目前的iPad而言,应用程序可能只有大约110MB的RAM空间。具体数字可能与iOS版本有关。无论如何,您需要了解您的各种视图的数据结构(内存)有多大。取决于内存的使用情况,60种不同的视图可能会被视为很多,如果您没有正确管理它,则很可能会很快耗尽。这不像Java或其他垃圾收集语言编程。

最后;尽管这听起来像是一个内存管理问题,但它可能永远是别的东西。如果您仍然遇到问题,您需要发布代码。现在它真的是猜测我们的工作。请记住,您没有虚拟机,也没有垃圾回收。

0

你正在使用内存,记住如果你分配内存,你必须释放它,在某些情况下,你可以使用autorelease,所以你不要忘记在void dealloc方法之前释放它。

相关问题