8

我有两个 UIViewControllers 按钮触发 segue(模态)到彼此。我想知道这是否会在来回跳转时导致任何内存泄漏,我看到 Living Object && 分配的内存正在上升,最终会导致应用程序崩溃。我没有任何一行代码——使用纯 UIViewControllers。 故事板

剖析器 1

分析器 2 项目的设置

我可能做错了什么?
我可以在项目设置中设置错误吗?
我在阅读分析器的静态数据吗?
使用 segues 时是否需要执行任何特殊的释放命令?

4

1 回答 1

14

您没有正确使用模态序列。您实现它的方式是,当您选择而不是返回到您来自的实例时,您正在为每个视图控制器创建一个新实例。这就是为什么您的内存使用量持续增加的原因。

在 iOS 6 之前,处理这个问题的正确方法是:

viewController2Done1)在视图控制器 1 中定义一个方法
2) 在视图控制器 2 中,创建一个名为delegatetype的属性id
3)在prepareToSegue视图控制器1中,delegate在视图控制器2中设置为self
4)在视图控制器2中,当该返回视图控制器1时,调用[delegate viewController2Done]
5)在viewController2Done调用中[self dismissModalViewControllerAnimated:YES]

此方法在 iOS 6 中仍然有效,但也有一种新unwind segue方法可以代替。要使用它,您将在视图控制器 1 中定义一个方法,如下所示:

目标-C:

- (IBAction)unwindFromViewController2:(UIStoryboardSegue *)segue
{
    NSLog(@"and we are back");
}

迅速:

@IBAction func unwindFromViewController2(_ segue: UIStoryboardSegue) {
    print("and we are back")
}

然后,您可以控制从视图控制器 2 中的按钮拖动到情节提要中视图控制器上方栏中的橙色退出图标。在弹出窗口中,您将选择unwindFromViewController2并瞧,您就完成了。

在此处输入图像描述

于 2012-10-28T03:48:05.020 回答