当我的应用程序第一次加载时,我将UIWindow的UIWindow属性设置为controllerA。
在我的应用程序的某个时候,我选择将rootViewController更改为controllerB。
问题是,有时当我在controllerB中做翻转转换时,我看到了controllerA的观点。出于某种原因,该视图没有被删除。更令人担忧的是,在将rootViewController设置为controllerB之后,controllerA的dealloc方法从未被炒鱿鱼。
我已经尝试过在切换到UIWindow之前手动删除controllerB的子视图,这解决了在后台查看controllerA视图的问题,但是controllerA的dealloc仍然没有被调用。这里发生了什么?。
苹果医生说:
根视图控制器提供窗口的内容视图。将视图控制器分配给此属性(以编程方式或使用Interface )将视图控制器的视图安装为窗口的内容视图。如果窗口具有现有的视图层次结构,则在安装新视图之前删除旧视图。
更新
以下是我的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;
}发布于 2013-07-16 05:35:37
事实证明,有两个不同的问题。1)我在控制器A中有一个保留周期,所以它永远不会被取消。第二,为了改变根视图控制器,您必须首先删除windows子视图(即使文档中有相反的建议)。
发布于 2013-07-14 01:41:28
问题可能在于您的ControllerA或ControllerB的实现,它们可能在代码中保留“self”,因此ARC无法自动释放您的ViewController。你能给你发ControllerA和ControllerB实现吗?
发布于 2018-07-27 12:34:39
var loginNavigationController: OnBoardViewController?{
willSet{
if newValue == nil {
loginNavigationController?.view.removeFromSuperview()
}
}
}loginNavigationController =零
https://stackoverflow.com/questions/17632024
复制相似问题