故事板连线导致内存泄漏

8
我有两个带有按钮的UIViewControllers,它们通过segue(模态)相互触发。我想要发现在来回跳转时是否会导致任何内存泄漏,我看到Living Object和分配的内存正在增加,这最终会导致应用崩溃。我没有任何一行代码 - 只使用纯UIViewControllers。
我可能做错了什么?
在项目设置中可能设置错了什么?
我是否错误地阅读了性能分析器的统计数据?
在使用segue时,我需要执行任何特殊的释放命令吗? storyboard profiler 1 profiler 2 project's settings
1个回答

14
您没有正确使用模态转换。您实现的方式是,在进行segue时创建了每个视图控制器的新实例,而不是返回到之前的实例。这就是为什么您的内存使用量一直在增加。
在iOS 6之前,处理此问题的正确方法是:
1)在视图控制器1中定义一个名为`viewController2Done`的方法
2)在视图控制器2中,创建一个名为`delegate`的类型为`id`的属性。
3)在视图控制器1的`prepareToSegue`中,将视图控制器2中的`delegate`设置为`self`
4)在视图控制器2中,当需要返回到视图控制器1时,调用`[delegate viewController2Done]`
5)在`viewController2Done`中,调用`[self dismissModalViewControllerAnimated:YES]`
这种方法在iOS 6中仍然有效,但也可以使用新的“退回segue”。要使用它,您需要在您的视图控制器1中定义一个方法,例如:
- (IBAction)unwindFromViewController2:(UIStoryboardSegue *)segue
{
    NSLog(@"and we are back");
}

Swift:

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

那么您需要从视图控制器 2 中的按钮向故事板中位于视图控制器上方的橙色退出图标进行拖放控制。在弹出窗口中,选择 unwindFromViewController2,完成。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接