iPhone应用程序由于内存不足而崩溃,但在模拟器中运行良好

时间:2010-11-25 09:10:21

标签: iphone memory crash

亲爱的,我有一个基于导航的应用程序,大约有60个视图。

我运行了以下内容: 1.构建和分析:bulid成功,没有抱怨。 2.仪器分配和泄漏:无泄漏。

然而,该应用程序在iPhone或iPad中崩溃但在模拟器中运行良好。 崩溃发生在第50个视图。 没有崩溃报告,但我确实在crashreporter文件夹中看到了LowMemory.log。

我已将iphone和ipad升级到4.2

有没有人有想法可能出错? 我一直在阅读和排除故障一周。

感谢您的回复。

我的应用程序有一个名为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]; 
}

}

推送视图的示例代码:

-(IBAction) buttonArrowClicked:(id)sender {
NSURL *tapSound   = [[NSBundle mainBundle] URLForResource: @"click"
                                            withExtension: @"aif"];

// Store the URL as a CFURLRef instance
self.soundFileURLRef = (CFURLRef) [tapSound retain];

// Create a system sound object representing the sound file.
AudioServicesCreateSystemSoundID (

                                  soundFileURLRef,
                                  &soundFileObject
                                  );
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

if (![[defaults stringForKey:@"sound"] isEqualToString:@"NO"]) {
    AudioServicesPlaySystemSound (soundFileObject);
}       

if (self.exercise2ViewController == nil)
{
    Exercise2ViewController *aViewController = [[Exercise2ViewController alloc]
                                                initWithNibName:@"Exercise2ViewController" bundle:[NSBundle mainBundle]];
    self.exercise2ViewController = aViewController;
    [aViewController release];
}
[self.navigationController pushViewController:self.exercise2ViewController animated:YES];   

}

2 个答案:

答案 0 :(得分:3)

在模拟器下运行时,通常不会遇到内存问题,因此在此平台上不会自动遇到这些错误。

然而,模拟器具有可以手动触发低内存事件的功能。如果这实际上是设备崩溃的原因,那么您也可能以这种方式在模拟器中触发相同的错误。

答案 1 :(得分:0)

分享一些关于如何推动视图控制器的代码将允许其他人为您提供帮助。

您可以通过执行以下操作更轻松地弹出到根视图控制器:

[self.navigationController popToRootViewControllerAnimated:YES];

您实际上是在已共享的代码中推送根视图控制器的新实例。