我有两个 UIViewController,其按钮可以相互触发 segue(模态)。我想知道这是否会在来回跳转时导致任何内存泄漏,并且我看到事件对象 && 分配的内存正在增加,最终会导致应用程序崩溃。我没有任何一行代码 - 使用纯 UIViewControllers。
我可能做错了什么?
我是否在项目设置中设置了错误?
我是否对探查器的静态信息读得不好?
在使用 segues 时,我是否需要执行任何特殊的发布命令?
最佳答案
您没有正确使用模式转场。按照您实现它的方式,当您进行segue时,您将创建每个 View Controller 的新实例,而不是返回到您来自的实例。这就是您的内存使用量持续增加的原因。
在 iOS 6 之前,处理此问题的正确方法是:
1) 在 View Controller 1中定义一个方法,例如viewController2Done
2) 在 View Controller 2 中,创建一个名为 delegate
的属性,其类型为 id
。
3) 在 View Controller 1 的 prepareToSegue
中,将 View Controller 2 中的 delegate
设置为 self
4)在 View Controller 2中,当需要返回 View Controller 1时,调用[delegate viewController2Done]
5)在viewController2Done
中调用[selfmissModalViewControllerAnimated:YES]
此方法在 iOS 6 中仍然有效,但也可以使用新的 unwind segue
来代替。要使用它,您需要在 View Controller 1 中定义一个方法,如下所示:
Objective-C:
- (IBAction)unwindFromViewController2:(UIStoryboardSegue *)segue
{
NSLog(@"and we are back");
}
swift :
@IBAction func unwindFromViewController2(_ segue: UIStoryboardSegue) {
print("and we are back")
}
然后,您可以控制从 View Controller 2 中的按钮拖动到 Storyboard 中 View Controller 上方栏中的橙色退出图标。在弹出窗口中,您可以选择 unwindFromViewController2
,瞧,您就完成了。
关于ios - Storyboard继续导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38847517/