当我的应用首次加载时,我将rootViewController
my 的属性设置UIWindow
为controllerA
.
在我的应用程序中的某个时候,我选择rootViewController
将controllerB
.
问题是,有时当我在 中进行翻转过渡时controllerB
,我会看到controllerA
's 背后的视图。由于某种原因,该视图没有被删除。更令人担忧的是,在设置rootViewController
to之后controllerB
,controllerA
'sdealloc
方法永远不会被触发。
我已经尝试UIWindow
在切换到 之前手动删除 的子视图controllerB
,这解决了controllerA
在后台查看视图但controllerA
仍然从未调用的 dealloc 的问题。这里发生了什么????
苹果文档说:
根视图控制器提供窗口的内容视图。将视图控制器分配给此属性(以编程方式或使用 Interface Builder)将视图控制器的视图安装为窗口的内容视图。如果窗口具有现有的视图层次结构,则在安装新视图之前删除旧视图。
更新
这是我的 AppDelegate 的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self showControllerA];
[self.window makeKeyAndVisible];
return YES;
}
- (void)showControllerA
{
ControllerA* a = [ControllerA new];
self.window.rootViewController = a;
}
- (void) showControllerB {
ControllerB* b = [ControllerB new];
self.window.rootViewController = b;
}