我想了解如何正確釋放目前我在轉換到新的視圖控制器。這裏是我的代碼:什麼時候應該在過渡到新的時候釋放當前的UIViewController?
// First create a CATransition object to describe the transition
CATransition *transition = [CATransition animation];
transition.duration = 0.3;
...
// Add the transition to the current view's superview
[self.view.superview.layer addAnimation:transition forKey:nil];
// Put together the controllers for the new screen
MainMenuController *menu = [[MainMenuController alloc] initWithNibName:@"MainMenuController" bundle:[NSBundle mainBundle]];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:menu];
// Transition
[self.view.superview addSubview:nav.view];
[self.view removeFromSuperview];
// These can now be released
[menu release]; // <- This works okay
[nav release]; // <- This causes problems
這個問題在理論上對我有意義。變量菜單可以釋放,因爲當我將它指定爲新建立的UINavigationController的根視圖控制器時,導航控制器保留了菜單。但是我沒有看到導航本身有可能被保留的任何地方,當然,當我按照上面的方式發佈時,我的用戶界面就會變得不可思議。 (它不會崩潰,但整個菜單UI缺失。)
我猜我不明白的是當我預計發佈導航。我的意思是,執行此代碼的視圖控制器對於這個世界來說並不長,所以它不能這樣做。我應該在哪裏打電話?
真的嗎?這對我來說確實很有意義,但我認爲我讀過Apple不建議在視圖控制器中使用視圖控制器。我會看看我能否找到那個鏈接。也許我只是誤解了。 –
您不應該在視圖控制器中顯示視圖控制器。即:同時在屏幕上沒有兩個。只有特殊的蘋果「祝福」控制器(導航,選項卡,分割視圖)才能同時在屏幕上顯示多個視圖控制器視圖。但是您可以同時在內存中擁有兩個視圖控制器對象。 – jsd
很酷,這很有道理。非常感謝! –