关键窗口的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?
这是我的测试演示在此处输入链接描述