我有两个 UIViewControllers 按钮触发 segue(模态)到彼此。我想知道这是否会在来回跳转时导致任何内存泄漏,我看到 Living Object && 分配的内存正在上升,最终会导致应用程序崩溃。我没有任何一行代码——使用纯 UIViewControllers。
我可能做错了什么?
我可以在项目设置中设置错误吗?
我在阅读分析器的静态数据吗?
使用 segues 时是否需要执行任何特殊的释放命令?
我有两个 UIViewControllers 按钮触发 segue(模态)到彼此。我想知道这是否会在来回跳转时导致任何内存泄漏,我看到 Living Object && 分配的内存正在上升,最终会导致应用程序崩溃。我没有任何一行代码——使用纯 UIViewControllers。
我可能做错了什么?
我可以在项目设置中设置错误吗?
我在阅读分析器的静态数据吗?
使用 segues 时是否需要执行任何特殊的释放命令?
您没有正确使用模态序列。您实现它的方式是,当您选择而不是返回到您来自的实例时,您正在为每个视图控制器创建一个新实例。这就是为什么您的内存使用量持续增加的原因。
在 iOS 6 之前,处理这个问题的正确方法是:
viewController2Done
1)在视图控制器 1 中定义一个方法
2) 在视图控制器 2 中,创建一个名为delegate
type的属性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
并瞧,您就完成了。