iOS - 内存警告会卸载 View Controller 并使应用程序无响应
Posted
技术标签:
【中文标题】iOS - 内存警告会卸载 View Controller 并使应用程序无响应【英文标题】:iOS - Memory warning unloads the View Controller and makes the app unresponsive 【发布时间】:2014-06-07 20:15:35 【问题描述】:身体: 我在我的应用程序中收到内存警告,之后 UI 停止响应。而且,在 XCode 日志中,我确实看到 ViewController 正在卸载消息。 恐怕是因为我没有正确处理视图之间的转换,这导致了这个内存问题。
ViewControllers 的简要说明(VC) 我拥有以及如何执行转换: 我有 1 个主/家庭 VC,这是我的应用程序主要工作流程的开始。 从所有其他 VC 那里,我有链接可以返回到 Home VC。 因此,我没有让所有 VC 到第一个 VC,而是使用以下方式:
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
HomeViewController *homeViewController = [sb instantiateViewControllerWithIdentifier:@"HomeView"];
[self presentViewController:homeViewController animated:YES completion:nil];
目的是避免将所有视图中的这么多 Segue 连接到主视图。
我觉得这种过渡方式会导致内存问题。相同的视图被多次添加到堆栈中并导致问题。 我不是 ios 专家,所以任何帮助/建议都会对我有很大帮助。
【问题讨论】:
【参考方案1】:看起来,每次您打算转换回 HomeView 时,您都在创建一个全新的 ViewController。这是一个非常糟糕的主意,因为每次进行转换时,您都是在堆栈上放置一个新的视图控制器,而不是使用原始的 ViewController(您应该这样做)。
因此,当您继续进行转换时,您正在分配新内存,这最终会导致内存警告,然后导致堆栈溢出,从而导致您的应用崩溃。
HomeViewController 应该使用该方法呈现其他视图控制器 presentViewController:animated:completion: 和 dismissViewControllerAnimated:completion: 或类似的方法,以便在您不想使用 segue 时执行转换。
请阅读此苹果文档: https://developer.apple.com/library/ios/featuredarticles/viewcontrollerpgforiphoneos/ModalViewControllers/ModalViewControllers.html
【讨论】:
感谢您的回复,但在我的情况下,工作流程涉及从 HomeView 开始的 3-4 个视图。但即使从第四个角度来看,我也应该能够回到家中。在这种情况下如何使用上述解决方案? 我提供的链接,如果您仔细阅读,将解释如何管理多视图应用程序,如何呈现和关闭它们以及如何分配和管理它们。以上是关于iOS - 内存警告会卸载 View Controller 并使应用程序无响应的主要内容,如果未能解决你的问题,请参考以下文章