当转换到一个新的UIViewController时,我应该什么时候释放当前的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
这个问题在理论上对我来说是有意义的。变量menu可以释放,因为当我将它赋值为新创建的UINavigationController的根视图控制器时,nav控制器保留了菜单。但我没有看到导航本身被保留的地方,当然,当我像上面那样发布时,我的UI变得很不稳定。(它不会崩溃,但整个菜单UI丢失)

我想我不明白的是什么时候我应该释放nav。我的意思是,视图控制器执行这段代码的时间不长,所以它做不到。我应该把电话打到哪里?

你不应该这样做,原因你已经发现了。

你需要第三个控制器,在你正在过渡的两个控制器之上,来容纳导航控制器,这样控制器1就可以释放它自己。

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

我对这段代码感觉不太好。我认为你可以告诉你的superView的控制器做这个任务通过使用委托或通知。

父视图包含导航。视图,所以它的控制器也应该保留nav。视图控制器。

最新更新