我的应用程序中我的ViewController之间有2个“循环”。
First Loop是游戏循环。首先显示VC我的等级。第二个VC是我的游戏画面,如果游戏结束,我的第三个VC会出现奖励积分,星星等等。
第二个“循环”只有三个带刷卡的VC。
好的,现在问题出在哪里?我有解除分配的问题。例如,加班我滑动,我的位置在上升,曲线越来越高......
也是我的游戏循环。我之前无法释放vc。
我想我没有正确理解[self dismissViewControllerAnimated:NO completion:nil];的工作原理。
是不是这个方法总是被发送到父vc,而父vc解除分配我执行这个方法的vc?
是父vc我的初始vc?
如何在“循环”中正确解除和取消分配我的视图控制器?
现在,我在乐器中的分配曲线在每个级别越来越高,大约18-21级我的应用程序崩溃,我认为是因为分配太多。
谁能告诉我锄头我可以解决我的问题吗?答案 0 :(得分:0)
从您的问题开始:
来自有关dismissViewControllerAnimated:completion
的文档:
呈现视图控制器负责解除视图 它呈现的控制器。如果在显示的视图上调用此方法 控制器本身,UIKit要求呈现视图控制器处理 解雇。
育儿与您的结构有点复杂。通常情况下,当VC(让它称之为X)呈现另一个VC(这个是Y)时,X将是Y的父级。但是你必须共享其他代码,例如你如何分配这些VC& #39; s,如何/何时展示它们等等,以了解哪一个是最多的"家长。
在X上致电[self presentViewController:Y animated:** completion:**
时
X将是
presentingViewController
。Y将是
presentedViewController
。
因此,X是Y的负责人。父母:)所以,你的问题对你的计划有点无效。但是,您可以很容易地说,您的初始VC可能是他提供的所有VC的父母。 (例如,如果你为VC安装了导航控制器,那么它将是根VC,并且它将负责"收卷/展开",这使它成为" parent" 。)
通常,视图控制器不应该在它们之间进行循环。它们可以相互依赖,但它不应该创建循环。
解决方案提案:
在我看来,每次关卡开始时你都会复制这3种VC。这是第一个循环的问题。第二个循环有点复杂,我假设您想要在刷到其他VC的同时保存VC的状态。
1。操纵当前的VC。
这些VC必须有一个清除状态的选项,所有内容都应该重置,就像第一次加载一样。您只会创建这些VC 一次,并在需要时重置它们。
2。创建一个包含这些VC的Singleton类。
(注意:由于这个解决方案涉及将VC保持在一个类中,它们总是会占用内存。但它们不会被吸引到窗口。)
当您启动应用程序时,将创建一个单例,您还将同时创建所需的VC。这个类应该有类似的方法:
addViewControllerToStack:
showViewController:animated:completion:
resetViewController:
当然还有保存这些VC的属性。
3。通过Singleton控制
当用户按下类似&#34的按钮时,转到X级",您必须与您创建的Singleton类进行交互。如果您要解雇VC,Singleton应该这样做。也用于演示。
<强>要点:强>
使用此方法,您无法创建多个相同类型的VC。您始终可以使用Singleton类创建的那个,并且始终可以重复使用它们。但要小心,因为你没有取消分配任何VC,你最终可能会有残留物(比如忘记重置/删除计时器,重置分数等)。
我在我的一个项目中使用过它,它需要一个带OpenGL的视图控制器。我无法解雇它,因为它总是在进行计算。而且它只能创建一次。坏的部分是,它位于VC segues的中间。因此,每当我需要呈现该VC时,我都会调用我的Singleton类来为我显示它。我只创造了一次。