当呈现为模态视图控制器时,ARC UINavigationController堆栈未被释放

时间:2012-01-04 13:02:22

标签: iphone ios uinavigationcontroller modal-dialog automatic-ref-counting

首先:我将我的应用程序移植到ARC,一切似乎都有效。但是现在我发现了一个问题:我有一个UINavigationController,它在模块上呈现了一些UIViewControllers。但是当我关闭模态视图控制器时,堆栈中的视图控制器似乎没有被释放。这是我的工作:

UIViewController* root = [[UIViewController alloc] init];
UINavigationController* navi = [[UINavigationController alloc] initWithRootViewController:root];
[self presentModalViewController:navi animated:TRUE];

然后从根目录推出更多视图控制器,但这并不重要。事实是我后来打电话

[self dismissModalViewControllerAnimated:TRUE];

root不会被取消分配。当然在我的代码中,root是UIViewController的子类,我跟踪dealloc和viewDidUnload,但没有被调用。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

导航控制器内有什么?可能是其他东西(可能是导航控制器中的视图控制器)是罪魁祸首,这导致链条意味着导航控制器不会被释放。

无论哪种方式,您发布的代码都是正确的,因此如果您的导航控制器在调用dismissModalViewController后没有被释放,那么它会建议其他东西仍然有一个对它或其依赖项的活动引用。我知道这不能回答你的问题,但你可能不得不四处寻找。

答案 1 :(得分:1)

由于您没有显示实际代码,因此很难判断您的根视图控制器发生了什么。

但是,使用ARC,如果你有一个指向对象的强指针,它就不会被释放。我怀疑你在将它添加到导航控制器后仍然坚持使用该控制器。

但是,如果没有看到你的代码,我无法分辨。