【问题标题】: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,瞧,您就完成了。

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 2014-06-07
      • 2013-11-20
      • 2011-10-28
      • 2016-01-18
      • 2012-12-13
      • 1970-01-01
      • 2011-01-08
      相关资源
      最近更新 更多