繁体   English   中英

情节提要剧情和接收内存警告

[英]Storyboard segues and receiving memory warning

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

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

在此处输入图片说明

这是segue的设置:

在此处输入图片说明

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

编辑:

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

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

似乎这是错误方法的问题,而不是情节提要。

让我猜想,因为在情节rootViewController之前,您一旦点击箭头按钮就曾经将应用程序的rootViewController更改为下一屏/上一屏。 因此,一旦您设置了新的rootViewController ,就会释放先前的屏幕并从内存中将其rootViewController

现在,您将以模态形式呈现每个下一个视图控制器,这涉及创建新的UIWindow并加载屏幕的所有层次结构, 并将上一个屏幕保持在新的视图之下,以便它可以容纳内存,从而避免内存崩溃。

好吧,您也可以使用情节rootViewController进行rootViewController方法,因为这只是开发时管理屏幕的另一种方法。 情节提要提供其他功能,例如segues,静态表格视图单元格,常规色泽颜色等。 [UIStoryboard -instantiateViewControllerWithIdentifier:]是您可能会发现有趣的方法。

但我建议您检查一下UIPageViewController ,它就像屏幕的容器一样。 不幸的是,它不能让场景使用场景(由于场景的特殊工作方式),因此无论如何您都必须使用-instantiateViewControllerWithIdentifier:方法。 您可以像以前使用rootViewController一样对待UIPageViewController内部视图控制器。

您也可以导航而无需猜测,而且我认为这很简单。

如果要从Class1导航到Class 2,请按照下列步骤操作。

1)在第1类中,导入第2类。

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

Class2 * next = [self.storyboard InstantiateViewControllerWithIdentifier:@“ Class2标识符名称”]; [self.navigationController pushViewController:next animation:YES];

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

无需添加Segue,您的情节提要看上去很干净。

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

使用导航控制器和推动也将视图控制器彼此堆叠。

如果您使用情节提要,笔尖或手动创建视图控制器,则会遇到此问题。

如果您的设计中用户可以在一系列视图控制器中移动,那么您可能希望在推动/展示一个新的视图控制器之前将其关闭。

您可能可以不使用动画而关闭以前的视图控制器,然后在每次要显示一个新的视图控制器时都显示新的视图控制器,以避免出现内存问题。 我必须进行试验才能获得我想要的效果,但这就是我的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM