2011-08-24 86 views
0

我想了解如何正確釋放目前我在轉換到新的視圖控制器。這裏是我的代碼:什麼時候應該在過渡到新的時候釋放當前的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缺失。)

我猜我不明白的是當我預計發佈導航。我的意思是,執行此代碼的視圖控制器對於這個世界來說並不長,所以它不能這樣做。我應該在哪裏打電話?

回答

0

你不應該這樣做,因爲你發現的原因。

您需要第三個控制器,高於您正在轉換的兩個控制器,以容納導航控制器,以便控制器1可以釋放自己。

+0

真的嗎?這對我來說確實很有意義,但我認爲我讀過Apple不建議在視圖控制器中使用視圖控制器。我會看看我能否找到那個鏈接。也許我只是誤解了。 –

+0

您不應該在視圖控制器中顯示視圖控制器。即:同時在屏幕上沒有兩個。只有特殊的蘋果「祝福」控制器(導航,選項卡,分割視圖)才能同時在屏幕上顯示多個視圖控制器視圖。但是您可以同時在內存中擁有兩個視圖控制器對象。 – jsd

+0

很酷,這很有道理。非常感謝! –

0
[self.view.superview addSubview:nav.view]; 

我對這段代碼感覺不太好。我想你可以通過使用委託或通知來告訴你的superView控制器完成這個任務。

superView包含nav.view,所以它的控制器也應該保留nav.view的控制器。

+0

感謝Thanh-Cong的回覆。我非常肯定,這是一個蘋果示例代碼項目,但我會仔細檢查。無論如何,如果我按照jsd的建議切換到一個父視圖控制器,則不需要這樣做。 –

相關問題