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 应用程序由于内存不足而崩溃,但在模拟器中运行良好的主要内容,如果未能解决你的问题,请参考以下文章