故事板塞格斯导致内存泄漏(Storyboard segues causing memory leak

2019-06-18 16:26发布

我有两个UIViewControllers具有按钮触发赛格瑞(模态)到彼此。 我想,如果发现这是造成任何内存泄漏而来回跳跃,我看到的是生活对象&&分配的内存是往上走,最终你会离开应用程序崩溃。 我没有任何代码一行 - 纯UIViewControllers工作。

我可能是做错了?
可能有我设置一些错误的项目设置?
我在读Profiler的statictics不好?
我是否需要做任何特殊的释放命令与塞格斯工作时?

Answer 1:

你没有使用模式正确塞格斯。 您已经实现了它的方式,当你Segue公司,而不是返回给你来自的情况下,你创建的每个视图控制器的新实例。 这就是为什么你的内存使用量继续增加。

iOS 6中之前,来处理这个正确的方法是:

1)定义的方法如viewController2Done鉴于控制器1
2)在视图控制器2,创建一个名为属性delegate类型的id
3)在prepareToSegue用于视图控制器1,设置delegate在视图控制器2至self
4)在视图控制器2,当它的时间,返回到视图控制器1,调用[delegate viewController2Done]
5)在viewController2Done呼叫[self dismissModalViewControllerAnimated:YES]

这种方法仍然工作在iOS 6中,但也有新unwind segue可以替代使用。 要使用它,你会在你的视图控制器1定义像这样的方法:

Objective-C的:

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

迅速:

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

那么你控制视图控制器2到橙色退出图标从按钮拖动在故事板视图控制器上方的栏。 在弹出,你会选择unwindFromViewController2 ,瞧,你就大功告成了。



文章来源: Storyboard segues causing memory leaks