gpt4 book ai didi

ios - 未调用 UIViewController -dealloc 方法

转载 作者:可可西里 更新时间:2023-11-01 04:21:23 33 4
gpt4 key购买 nike

我正在使用自动引用计数。我有一个自定义的 UIViewController 子类,每当我调用 -presentViewController: animated:completion: 或从 super View 中删除它的 View 时,我都想 NSLog类似“我被释放”这样的东西,所以我知道 View Controller 已成功删除。我在我的 View Controller 中实现了 -dealloc 方法。但是我开始了一个测试项目,其中我只有两个 UIViewController 实例(没有保留周期)并且 -dealloc 在我推送第二个 UIViewController 模态或当我删除 super View 或当我从父 View Controller 中删除它时。我错过了什么吗?在我的原始项目(不是测试用例)中,Instruments 向我展示了那些 Controller 留下了我无法摆脱的内存占用空间。

最佳答案

如果你想切换 View Controller ,并让你正在切换的 View Controller 被释放,那么只需切换窗口的 Root View Controller 。所以,如果你在 VC1 中并且想转到 VC2,那么在 VC1 中执行此操作:

VC2 *vc2 = [[VC2 alloc] init]; // or however else is appropriate to get an instance of this class
self.view.window.rootViewController = vc2;

如果您还没有创建任何指向 vc1 的属性,那么在进行此切换后它将被释放。

如果你想使用模式演示或模式转场(切换 Controller 时获取动画),你仍然可以通过在演示后切换 Root View Controller ,从 viewDidAppear 方法中获取要释放的初始 Controller vc2:

-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.view.window.rootViewController = self;
}

关于ios - 未调用 UIViewController -dealloc 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16372840/

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