gpt4 book ai didi

ios - Storyboard segues 导致内存泄漏

转载 作者:可可西里 更新时间:2023-11-01 03:07:13 26 4
gpt4 key购买 nike

我有两个 UIViewControllers,它们的按钮相互触发 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 中,创建一个类型为 id 的名为 delegate 的属性。
3) 在 View Controller 1 的 prepareToSegue 中,将 View Controller 2 中的 delegate 设置为 self
4) 在 View Controller 2 中,当返回 View Controller 1 时,调用 [delegate viewController2Done]
5) 在 viewController2Done 调用 [self dismissModalViewControllerAnimated: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 segues 导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13106095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com