检查它:不[UIWindow addSubView:]是否保留?
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上的每个IBAction都会被调用以解除分配的实例。评论这条线使一切正常。
我注意到我的loginController和模板附带的navigationController之间的差异; navigationController是在-(void)dealloc{ }
中发布的综合属性,因此在放入window
之后仍然存在。
啊。回想起来,这很明显。我在那里看着一个无控制器的视图。所以我没有必要在视图上管理保留计数,那么,在那里?我想当它从RemoveSuperview中移除时,它会回落到1,然后当控制器被释放时(我需要使它成为一个属性,所以我可以在dealloc时间释放它,我猜)它会完全消失。是对的吗? – 2010-05-20 12:55:53
@丹:是的。 (如果你想要一个无控制器视图,直接创建一个UIView。) – kennytm 2010-05-20 13:50:06