故事板 segues 和接收内存警告

Storyboard segues and receiving memory warning

我正在使用基于 iOS 9 的 SDK 开发应用程序,这是我第一次使用 Storyboards,我有 20 个视图控制器,每个场景都有 Next/Previous 按钮用于后退和前进。我对前进有很大的问题!。例如,如果我从场景 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 屏幕更改为 next/previous 屏幕。因此,一旦您设置了新的 rootViewController.

,先前的屏幕就会从内存中释放和释放

现在您将以模态方式呈现每个下一个视图控制器,这涉及创建新的 UIWindow 并加载您屏幕的所有层次结构,并且 将之前的视图控制器保持在新的下面 所以它保存了内存,你正在摆脱内存崩溃。

好吧,您也可以使用情节提要来执行 rootViewController 方法,因为它只是在开发过程中管理屏幕的另一种方式。 Storyboard 提供额外的功能,如 segues、静态 table 视图单元格、一般色调颜色等。 [UIStoryboard -instantiateViewControllerWithIdentifier:] 是您可能会感兴趣的方法。

但我更愿意推荐您查看 UIPageViewController,它就像一个屏幕容器。不幸的是,它不能为您的场景提供转场(因为转场的特殊工作方式)所以您无论如何都必须使用 -instantiateViewControllerWithIdentifier: 方法。您可以像对待 rootViewController 之前那样对待 UIPageViewController 的内部视图控制器。

您也可以在没有 segue 的情况下导航,我认为这是一种简单的方法。

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

1) 在Class1中,导入Class2.

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

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

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

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

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

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

如果您使用故事板、nib 或手动创建视图控制器,则会遇到此问题。

如果您的设计让用户可以在大量视图控制器之间移动,那么您可能希望在 pushing/presenting 新视图控制器之前关闭前一个视图控制器。

您可以在没有动画的情况下关闭以前的视图控制器,然后在每次要显示新视图控制器时显示新的视图控制器并避免内存问题。我必须对其进行试验才能获得我想要的效果,但这就是我的建议。