0

关键窗口的rootViewController是一个登录ViewController。在登录viewController中,我会模态或者push其他viewController。当登录成功时,它会将rootViewController切换到viewController C。我发现登录viewController的dealloc方法没有被触发。

我发现我的问题与我的问题相似,但没有解决我的问题。

测试演示代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
ViewControllerA *vc =  [[ViewControllerA alloc] init];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];

return YES;
}

在 viewControllerA(vcA) 中,我模态 viewControllerB(vcB)

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

ViewControllerB *vcB = [[ViewControllerB alloc] init];
[self presentViewController:vcB animated:YES completion: nil];

}

在 vcB 中,我将关键窗口的 rootViewController 切换到 vcC

UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
//        [keyWindow.rootViewController removeFromParentViewController]; 
//        keyWindow.rootViewController = nil; 
keyWindow.rootViewController = [ViewControllerC new];

你会发现,vcA的dealloc方法不会触发。

如果我在切换 rootViewController 时关闭 vcB,那就太好了

[self dismissViewControllerAnimated:NO completion: nil];

UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
//        [keyWindow.rootViewController removeFromParentViewController]; // 无效
//        keyWindow.rootViewController = nil; // 无效
keyWindow.rootViewController = [ViewControllerC new];

那么,我应该怎么做才能dealloc vcA?

这是我的测试演示在此处输入链接描述

4

0 回答 0