檢查它:不[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