故事板会导致内存泄漏

Pio*_*otr 8 cocoa-touch uiviewcontroller ios uistoryboard uistoryboardsegue

我有两个UIViewControllers,按钮互相触发segue(模态).我想发现这是否会在来回跳跃时导致任何内存泄漏,我发现Living Object &&分配的内存正在上升,最终将导致应用程序崩溃.我没有任何单行代码 - 使用纯UIViewControllers. 故事板

剖析器1

探查者2 项目的设置

我可能做错了什么?
我可以在项目设置中设置错误吗?
我是否正在阅读探查者的统计数据?
使用segues时是否需要发出任何特殊的释放命令?

vac*_*ama 13

您没有正确使用模态segues.实现它的方式是,当您进行segue而不是返回到来自的实例时,您将创建每个视图控制器的新实例.这就是为什么你的内存使用量继续增加.

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

1)viewController2Done在视图控制器
2中定义诸如视图控制器1 2)中的方法,创建称为delegate类型的属性id.
3)在prepareToSegue视图控制器1中,delegate在视图控制器2中设置视图控制器2至self
4),当返回视图控制器1时,[delegate viewController2Done]
viewController2Done呼叫中调用5)[self dismissModalViewControllerAnimated:YES]

此方法仍可在iOS 6中使用,但也unwind segue可以使用新的方法.要使用它,您可以在视图控制器1中定义一个方法,如下所示:

Objective-C的:

- (IBAction)unwindFromViewController2:(UIStoryboardSegue *)segue
{
    NSLog(@"and we are back");
}
Run Code Online (Sandbox Code Playgroud)

迅速:

@IBAction func unwindFromViewController2(_ segue: UIStoryboardSegue) {
    print("and we are back")
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以控制从视图控制器2中的按钮拖动到故事板中视图控制器上方栏中的橙色退出图标.在弹出窗口中,你选择了unwindFromViewController2瞧,你已经完成了.

在此输入图像描述