gpt4 book ai didi

ios - presentViewController 内存泄漏

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

我刚刚开始 iOS 编程,正在尝试以编程方式切换 View Controller (即从一个 View 切换到另一个 View )。我知道呈现下一个 View Controller 的 View Controller 需要在呈现另一个 View Controller 后释放,但我似乎无法得到任何有效的东西。我尝试在呈现下一个 Controller 后关闭 Controller ,但我仍然遇到内存泄漏。

所以我在 ViewControllerA 中有这段代码:

- (void) switchViews {
[self presentViewController:[[ViewControllerB alloc] init] animated:NO completion:nil];
}

ViewControllerB 中:

- (void) switchViews {
[self presentViewController:[[ViewControllerA alloc] init] animated:NO completion:nil];
}

View 中的按钮触发这些事件,基本上它们只是从一个 View 切换到另一个 View 。

那么我该如何来回切换 View ,以免造成内存泄漏?作为旁注,我正在使用 ARC。

最佳答案

基本上你在上面的代码中所做的是创建 ViewController A,然后是 ViewControllerB,然后是另一个 ViewController A,然后是另一个 ViewController B,然后是另一个 ViewController A,然后是另一个 ViewController B。

您应该做的是从 ViewController A 开始,创建 ViewController B,然后返回到 ViewController A,关闭 Viewcontroller B。

阅读this blog有关如何按照我解释的简单方法进行操作的建议。

现在,使用此方法可能会导致一些问题,并且它们很可能只会在您想要做的不仅仅是关闭当前 ViewController 时发生。 Apple 确实在他们的文档中声明:

"When it comes time to dismiss a presented view controller, the preferred approach is to let the presenting view controller dismiss it. In other words, whenever possible, the same view controller that presented the view controller should also take responsibility for dismissing it. Although there are several techniques for notifying the presenting view controller that its presented view controller should be dismissed, the preferred technique is delegation."

现在,正如@LeoNatan 的回答所说,使用 [self dismissViewControllerAnimated:completion: 来执行此操作可能是一种不好的做法。上一段就是为什么,我相信,他说这是个坏主意。

学习如何以两种方式做到这一点确实是一种很好的做法。虽然我的答案是快速的方法,但它也有点脏。

关于ios - presentViewController 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175152/

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