代码之家  ›  专栏  ›  技术社区  ›  Dan Ray

[UIWindow addSubView:]是否保留?

  •  1
  • Dan Ray  · 技术社区  · 15 年前

    检查一下:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSLog(@"Checking login--user value is %@", [defaults valueForKey:@"userID"]);
    if ([defaults valueForKey:@"userID"] == NULL){
        LoginViewController *loginController = [[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil];
        [window addSubview:loginController.view];
        [loginController release];
    }
    else {
        [window addSubview:[navigationController view]];
    }
    

    每隔一个地方,当我把一个子视图放到另一个视图中时,我会在我这样做之后释放这个视图,因为它现在属于它的子视图。不过,在这里,当我这么做的时候 [loginController release] ,该loginController上的每个iAction都会针对已解除分配的实例调用。把那句话注释掉,一切就都好了。

    -(void)dealloc{ } ,所以投入使用后仍然存在 window .

    2 回复  |  直到 15 年前
        1
  •  3
  •   kennytm    15 年前

    -addSubview: 只保留视图, 控制器。

        2
  •  0
  •   E. Rivera    12 年前

    您不应该手动将控制器的视图添加到视图层次结构中,因为控制器不会被保留,即使保留也不会收到预期的系统调用(例如方向更改等)。

    而是将控制器添加到 UIWindow rootViewController 财产。

    如果仍然需要在某个地方添加控制器的视图,那么也许不应该使用视图控制器,而应该使用简单的自定义视图。