我想了解如何正确释放目前我在转换到新的视图控制器。这里是我的代码:什么时候应该在过渡到新的时候释放当前的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
很酷,这很有道理。非常感谢! –