dealloc不叫改变选项卡

假设有一个带有两个选项卡A和B的标签栏控制器,其中A是一个导航控制器。

当用户在A时,他可以推A1和A2,这两个都是视图控制器。 A2上的后退button,执行:

[self.navigationController popViewControllerAnimated:YES]; 

这正确地触发了A2上的dealloc方法。

如果用户在A2中,然后切换到标签B,我需要在A2上调用dealloc方法; 因此我在TabBarController中实现了以下方法:

 - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { UINavigationController *nc = (UINavigationController*)tabBarController.selectedViewController; [nc popToRootViewControllerAnimated:YES]; return YES; } 

但是在这个stream程中,A2的dealloc方法永远不会被调用! 它怎么可能从A2到A1的popup工作,而改变标签的视图控制器不会被释放?

感谢任何提示!

dealloc仅仅是为了移除观察者和释放内存 – 何时或者何时被调用取决于运行时

例如
考虑释放与自动释放的情况(当它被调用时的影响),或者如果你终止一个应用程序(根本不叫)

而是依赖于dealloc,写一个你明确调用的方法..例如像停止或完成或清理

或…使用viewDidDisappear。

– 无论如何,不​​要依靠dealloc

看起来didSelectViewController是在标签控制器切换到目标标签之前触发的。 因此, popToRootViewControllerAnimated方法的执行popToRootViewControllerAnimated正确地popup所有视图控制器,但不能真正释放可见的视图控制器,因为它正在被应用程序描绘。

为了达到我的结果,我想出了以下解决scheme。 在每个选项卡的第一个视图控制器对应的所有视图控制器的viewDidAppear方法,我执行popToRootViewControllerAnimated (所有这些都是导航控制器)。