iOS - 内存警告卸载View Controller并使应用程序无响应

时间:2014-06-07 20:15:35

标签: ios iphone uiviewcontroller

身体: 我在我的应用程序中收到内存警告,之后UI停止响应。并且,在XCode日志中,我确实看到ViewController是Unloaded消息。 我担心这是因为我没有正确处理视图之间的转换,这导致了这个内存问题。

ViewControllers的简要说明(VC)我有以及如何执行转换:
我有1个主/家庭VC,这是我的应用程序的主要工作流程的开始。 从所有其他VC,我有链接回到家庭VC。 因此,我使用以下方式,而不是从所有VC到第一个的Segues,使用以下方式:


UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
HomeViewController *homeViewController = [sb instantiateViewControllerWithIdentifier:@"HomeView"];
[self presentViewController:homeViewController animated:YES completion:nil];

意图是避免从连接到主视图的所有视图中获得如此多的Segues。

我觉得这种过渡方式会导致内存问题。相同的视图被多次添加到堆栈并导致问题。 我不是iOS的专家,所以任何帮助/建议对我都有很大的帮助。

1 个答案:

答案 0 :(得分:2)

看起来你的方式就是每次打算转换回HomeView时都要创建一个全新的ViewController。这是一个非常糟糕的主意,因为每次进行转换时,您都会在堆栈上放置一个新的视图控制器,而不是使用原始的ViewController(您应该这样做)。

因此,当您继续进行转换时,您将分配新内存,最终导致内存警告,然后导致堆栈溢出,从而导致应用程序崩溃。

HomeViewController应该使用这个方法呈现其他视图控制器presentViewController:animated:completion:和dismissViewControllerAnimated:completion:或类似的东西,以便在你不想使用segues时执行转换。

请阅读此苹果文档: https://developer.apple.com/library/ios/featuredarticles/viewcontrollerpgforiphoneos/ModalViewControllers/ModalViewControllers.html