所以,
我通常从nib初始化控制器并将其弹出到视图堆栈开始。但问题是,第一个控制器并没有真正消失——它仍然存在。
所以,我们开始走这条路:
启动appdelegate并加载rootviewcontroller:
mRootController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
[(m42Window *)[application.windows objectAtIndex:0] setController:mRootController];
从rootviewcontroller转到regionviewcontroller:
RegionViewController *controller = [[RegionViewController alloc] initWithNibName:@"RegionViewController" bundle:nil];
[[self getWindow] setController:controller];
[controller release];
方法是:
- (void) setController:(m42ViewController *)controller
{
if (mController != nil)
{
for (UIView *view in mController.view.subviews)
{
if (view != nil)
{
[view removeFromSuperview];
}
}
[mController.view removeFromSuperview];
[mController release];
mController = nil;
}
mController = controller;
[mController retain];
[self insertSubview:mController.view atIndex:1];
}
本期图片:
rootview控制器:
http://mr-sk.com/img/rootViewController.png
regionviewcontroller(从rootviewcontroller可见的图像):
http://mr-sk.com/img/regionViewController.png
现在的问题是rootviewcontroller中的图像是可见的(我有一个空的uiimageview,它显示控制器上的图像
在下面
它)在regionviewcontroller中-不管是什么原因,视图实际上并没有从超级视图中移除并释放。出于许多原因,我们希望这些观点消失:
-
记忆脚印-为什么要保留我们不需要的各种资产。如果用户返回,我们可以重新创建它们
-
如果代码在其他控制器中运行呢?好吧,在这种情况下我们不想这样。我们要他们走。
那么,怎么了?从根本上说,我们一定是错过了iphone 101课程。呵呵。
我看到了,因为这是我和另一个人。
谢谢。