Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-内存警告卸载视图控制器并使应用程序无响应_Ios_Iphone_Uiviewcontroller - Fatal编程技术网

iOS-内存警告卸载视图控制器并使应用程序无响应

iOS-内存警告卸载视图控制器并使应用程序无响应,ios,iphone,uiviewcontroller,Ios,Iphone,Uiviewcontroller,正文: 我的应用程序中出现内存警告,之后UI停止响应。在XCode日志中,我确实看到了ViewController被卸载的消息。 我担心这是因为我没有正确处理视图之间的转换,这导致了内存问题 我拥有的ViewController(VC)以及如何执行转换的简要说明: 我有1个主/主VC,这是我的应用程序主工作流的开始。 从所有其他风投,我有链接回到家里的风投。 因此,我使用以下方法,而不是从所有VCs到第一个VCs的分段: UIStoryboard* sb = [UIStoryboard sto

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

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


UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
HomeViewController *homeViewController = [sb instantiateViewControllerWithIdentifier:@"HomeView"];
[self presentViewController:homeViewController animated:YES completion:nil];
这样做的目的是为了避免从所有视图连接到主视图时出现如此多的分段

我觉得这种过渡方式导致了记忆问题。同一视图多次添加到堆栈中,并导致问题。
我不是iOS专家,所以任何帮助/建议都会对我大有裨益。

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

因此,当您不断进行转换时,您正在分配新内存,这最终会导致内存警告,然后导致堆栈溢出,从而导致应用程序崩溃

HomeViewController应使用此方法呈现其他视图控制器presentViewController:animated:completion:和dismissViewControllerAnimated:completion:或类似内容,以便在不想使用分段的情况下执行转换

请阅读以下苹果文档:

感谢您的回复,但在我的案例中,工作流涉及从HomeView开始的3-4视图。但即使从第四视图来看,我也应该能够回到家里。在这种情况下,我如何使用上述解决方案?如果您仔细阅读,我提供的链接将解释如何管理多视图应用程序,如何显示和关闭它们,以及如何分配和管理内存。