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

Posted

技术标签:

【中文标题】iPhone 应用程序由于内存不足而崩溃,但在模拟器中运行良好【英文标题】:iPhone App Crashes due to Low Memory but works fine in simulator 【发布时间】:2011-05-15 14:09:15 【问题描述】:

亲爱的,我有一个基于导航的应用,有大约 60 次浏览。

我已经运行了以下内容: 1.构建和分析:构建成功,没有抱怨。 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];   

【问题讨论】:

【参考方案1】:

在模拟器下运行一般不会遇到内存问题,所以这个平台不会自动遇到这些错误。

但是,模拟器确实有一个功能,您可以手动触发内存不足事件。如果这确实是导致设备崩溃的原因,那么您也有可能通过这种方式在模拟器中触发相同的错误。

【讨论】:

【参考方案2】:

分享一些关于你如何推送视图控制器的代码将允许其他人帮助你。

您可以通过以下方式更轻松地弹出到根视图控制器:

[self.navigationController popToRootViewControllerAnimated:YES];

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

【讨论】:

感谢所有回复。我添加了一些代码供您查看 很抱歉,我已经重复发布了。请参考***.com/questions/4281713/… 非常感谢你救了我。我的应用程序现在似乎没有崩溃!当我在调试模式下运行时,它仍然在我的设备中崩溃。但是,连接后它在我的设备中运行良好。这正常吗? 这可能是一个不同的问题,比如在推送后不释放视图控制器。对于每个 [self.navigationController pushViewController:viewController animated:YES];必须有一个[viewController release];除非你真的知道自己在做什么,否则立即在它之后。 对不起,我的意思是它在断开连接时在设备中运行良好。请参阅我上面的示例代码。你的意思是我必须添加 [exercise2ViewController 版本];在末尾?目前我的 [exercise2ViewController 版本];是在dealloc方法中。非常感谢您的耐心等待。

以上是关于iPhone 应用程序由于内存不足而崩溃,但在模拟器中运行良好的主要内容,如果未能解决你的问题,请参考以下文章

应用程序仅在 iPhone 8 iOS 14.4.1 上因内存不足而崩溃

崩溃日志:-“由于没有系统应用程序而终止”

应用程序因内存使用率非常低而崩溃 iphone/iPad

应用程序在模拟器中运行良好,但在 iphone 中崩溃

在 iPhone 上测试时应用程序崩溃,但在模拟器中没有

Iphone上的滑块崩溃程序,但在模拟器上工作