alo*_*loo 25 uiviewcontroller uiwindow ios rootview
当我的应用程序第一次加载时,我将rootViewController
my 的属性设置UIWindow
为controllerA
.
在我的应用程序中的某个时候,我选择更改rootViewController
为controllerB
.
问题在于,有时当我进行翻转过渡时controllerB
,我会看到controllerA
背后的观点.由于某种原因,视图没有被删除.什么更令人担忧的是,设置后rootViewController
到controllerB
,controllerA
的dealloc
方法永远不会被解雇.
我已经尝试UIWindow
在切换之前删除手动的子视图controllerB
,这解决了controllerA
在后台看到视图的问题但是controllerA
dealloc仍然永远不会被调用.这里发生了什么????
苹果文档说:
根视图控制器提供窗口的内容视图.将视图控制器分配给此属性(以编程方式或使用Interface Builder)将视图控制器的视图安装为窗口的内容视图.如果窗口具有现有视图层次结构,则在安装新视图之前将删除旧视图.
UPDATE
这是我的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;
}
Run Code Online (Sandbox Code Playgroud)
alo*_*loo 10
事实证明,有两个不同的问题.1)我在控制器A中有一个保留周期,所以它从来没有得到dealloc'd.其次,为了改变根视图控制器,你必须删除Windows子视图第(即使文档并非如此)
归档时间: |
|
查看次数: |
12427 次 |
最近记录: |