ios - Storyboard继续导致内存泄漏

标签 ios cocoa-touch uiviewcontroller uistoryboard uistoryboardsegue

我有两个 UIViewController,其按钮可以相互触发 segue(模态)。我想知道这是否会在来回跳转时导致任何内存泄漏,并且我看到事件对象 && 分配的内存正在增加,最终会导致应用程序崩溃。我没有任何一行代码 - 使用纯 UIViewControllers。 storyboard

profiler 1

profiler 2 project's settings

我可能做错了什么?
我是否在项目设置中设置了错误?
我是否对探查器的静态信息读得不好?
在使用 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 ,瞧,您就完成了。

enter image description here

关于ios - Storyboard继续导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38847517/

相关文章:

ios - 添加 Apple 开发者帐户时出错 : authentication service is unavailable

ios - 无法将类型 '() -> Void' 的值转换为预期的参数类型 '(() -> Void)?'

ios - 滚动 UICollectionView 时忽略嵌入式 UIButton 的触摸事件

ios - 我怎样才能改变颜色/把东西放在我的 View Controller 的 View 后面(快速)?

iphone - 什么时候需要使用 View Controller ?

ios - 从许多不同的 ViewController 中呈现 ViewController 的最佳方式

ios - 旋转UIImage并移动

ios - 为更新节拍器中的 bpm 而转换 Y 坐标的微积分

iphone - 如何 "rotate"层/ View (例如,就像你在 enigmo 中所做的那样)

ios - initWithNibName 没有被调用