ViewController分配和释放问题

时间:2015-09-30 08:23:52

标签: ios objective-c uiviewcontroller

我的应用程序中我的ViewController之间有2个“循环”。

First Loop是游戏循环。首先显示VC我的等级。第二个VC是我的游戏画面,如果游戏结束,我的第三个VC会出现奖励积分,星星等等。

第二个“循环”只有三个带刷卡的VC。

enter image description here

好的,现在问题出在哪里?我有解除分配的问题。例如,加班我滑动,我的位置在上升,曲线越来越高......

也是我的游戏循环。我之前无法释放vc。

我想我没有正确理解[self dismissViewControllerAnimated:NO completion:nil];的工作原理。

是不是这个方法总是被发送到父vc,而父vc解除分配我执行这个方法的vc?

是父vc我的初始vc?

如何在“循环”中正确解除和取消分配我的视图控制器?

现在,我在乐器中的分配曲线在每个级别越来越高,大约18-21级我的应用程序崩溃,我认为是因为分配太多。

谁能告诉我锄头我可以解决我的问题吗?

1 个答案:

答案 0 :(得分:0)

从您的问题开始:

  • 这个方法总是被发送到父vc,并且父vc解除分配我执行此方法的vc是不是正确的?

来自有关dismissViewControllerAnimated:completion的文档:

  

呈现视图控制器负责解除视图   它呈现的控制器。如果在显示的视图上调用此方法   控制器本身,UIKit要求呈现视图控制器处理   解雇。

  • 父vc是我的初始vc吗?

育儿与您的结构有点复杂。通常情况下,当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类来为我显示它。我只创造了一次。