【发布时间】:2023-04-10 16:54:01
【问题描述】:
我刚刚开始 iOS 编程,正在尝试以编程方式切换视图控制器(即从一个视图切换到另一个视图)。我知道呈现下一个视图控制器的视图控制器需要在呈现另一个视图控制器后被释放,但我似乎无法得到任何有效的东西。在展示下一个控制器后,我尝试关闭控制器,但仍然出现内存泄漏。
所以我在ViewControllerA 中有这个代码:
- (void) switchViews {
[self presentViewController:[[ViewControllerB alloc] init] animated:NO completion:nil];
}
这个在ViewControllerB:
- (void) switchViews {
[self presentViewController:[[ViewControllerA alloc] init] animated:NO completion:nil];
}
视图中的按钮触发这些事件,基本上它们只是从一个视图切换到另一个视图。
那么如何来回切换视图以免造成内存泄漏?另外,我使用的是 ARC。
【问题讨论】:
-
这不是答案,但在 Objective-c 中,
BOOL类型需要YES或NO而不是true或false。 -
看起来你也不是在解雇旧的 VC,只是不断地展示它们。你会在某个地方解雇他们吗?
-
有泄漏是因为每次调用'switchViews'方法时,都是分配内存并创建一个新的viewcontrollerA/B,而不是检查内存中是否已经存在这样的控制器并重用它们。跨度>
-
@danielbeard 啊谢谢你让我知道 BOOL 的事情,我刚开始使用 Objective-C。我已经更新了问题。
-
好吧,既然 B 来自 A,不用
presentViewController回到 A,只需在 VC B 中使用[self dismissViewControllerAnimated:NO completion:nil];回到 A。这样你就不会一直重新创建在一个无限循环中。
标签: ios uiviewcontroller