故事板分段和接收内存警告

时间:2015-09-26 08:05:14

标签: ios objective-c iphone storyboard segue

我正在使用基于iOS 9的SDK开发应用程序,这是我第一次使用Storyboard,我有20个视图控制器,每个场景都有下一个/上一个按钮可以前后移动。我前进的问题很大!如果我从场景1移动到例如场景15,我收到内存警告,然后应用程序崩溃。我搜索过,似乎有一种方法叫unwind segue,但似乎这是为了回去!它就像dissMiss方法。

我在Interface Builder中用线连接每个场景:

enter image description here

这是segue的设置:

enter image description here

如果你帮助我,我将不胜感激。

已编辑:

我尝试以编程方式呈现视图控制器,但结果是一样的!

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    WhatIsDino *vc = (WhatIsDino*)[mainStoryboard instantiateViewControllerWithIdentifier:@"WID"];
    [self presentViewController:vc animated:YES completion:nil];

3 个答案:

答案 0 :(得分:2)

似乎这是一个错误的方法问题,而不是故事板。

让我猜一下,因为在故事板之前,您曾经在点击箭头按钮后将应用程序的rootViewController更改为下一个/上一个屏幕。因此,一旦设置了新的rootViewController,就会释放先前的屏幕并从内存中取消分配。

现在,您以模态方式呈现每个下一个视图控制器,其中包括创建新的UIWindow并加载您屏幕的所有层次结构,保留以前的新视图以便它保留记忆,你就会失去记忆力。

嗯,您也可以使用故事板进行rootViewController方法,因为它只是在开发过程中管理屏幕的另一种方式。 Storyboard提供了其他功能,如segues,静态表格视图单元格,一般色调颜色等。 [UIStoryboard -instantiateViewControllerWithIdentifier:]是您可能感兴趣的方法。

但我建议您查看UIPageViewController,它就像是屏幕的容器。不幸的是,它不能让你的场景产生细分(因为segues工作的特殊方式)所以你必须使用-instantiateViewControllerWithIdentifier:方法。您可以像以前一样使用UIPageViewController来处理rootViewController的内部视图控制器。

答案 1 :(得分:0)

你也可以不用segue进行导航,我认为这很容易。

如果您想从Class1导航到Class 2,请按照以下步骤操作。

1)在Class 1中,Import Class2。

2)在按钮操作中,编写此代码。

Class2 * next = [self.storyboard instantiateViewControllerWithIdentifier:@“Class2 Identifier name”]; [self.navigationController pushViewController:next animated:YES];

不要忘记在故事板中为特定类的属性检查器中的“故事板ID”提供标识符名称。

无需添加Segue,您的故事板看起来很干净。

答案 2 :(得分:0)

问题是您在视图控制器之后使用模态显示添加视图控制器。这会导致每个视图控制器被添加到前一个视图控制器之上,并且所有视图控制器都会使用越来越多的内存来累积。

使用导航控制器和推送也可以将视图控制器堆叠在一起。

如果您使用故事板,笔尖或手动创建视图控制器,则会出现此问题。

如果您的设计中用户可以通过大量的视图控制器移动,那么您可能希望在推送/呈现新视图控制器之前解除之前的设计。

您可以在没有动画的情况下关闭以前的视图控制器,然后在每次要显示新视图控制器时显示新视图控制器并避免内存问题。我不得不试验它以获得我所追求的效果,但这就是我的建议。