【问题标题】:Storyboard segues causing memory leaksStoryboard segues 导致内存泄漏
【发布时间】:2012-10-17 20:24:52
【问题描述】:
我有两个 UIViewControllers 按钮触发 segue(模态)到彼此。我想知道这是否会在来回跳转时导致任何内存泄漏,我看到 Living Object && 分配的内存正在上升,最终会导致应用程序崩溃。我没有任何一行代码——使用纯 UIViewControllers。
我可能做错了什么?
我可以在项目设置中设置错误吗?
我是否对分析器的静态数据读得很差?
在使用 segue 时是否需要执行任何特殊的释放命令?
【问题讨论】:
标签:
ios
cocoa-touch
uiviewcontroller
uistoryboard
uistoryboardsegue
【解决方案1】:
您没有正确使用模态序列。您实现它的方式是,当您继续而不是返回到您来自的实例时,您正在为每个视图控制器创建一个新实例。这就是您的内存使用量持续增加的原因。
在 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 中仍然有效,但也可以使用新的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,瞧,您就完成了。