Objective c 旋转时在当前视图上加载不同的XIB

Objective c 旋转时在当前视图上加载不同的XIB,objective-c,cocoa-touch,ipad,xib,nib,Objective C,Cocoa Touch,Ipad,Xib,Nib,我在我的应用程序上有两个不同的视图(一个用于纵向模式,另一个用于横向模式),我希望将它们分离到不同的XIB文件中,以便使用更少的内存。我已经这样做了,但是当我改变iPad的方向时,我的视图变成了空白。 我已尝试执行以下操作: - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ self = [[MyCon

我在我的应用程序上有两个不同的视图(一个用于纵向模式,另一个用于横向模式),我希望将它们分离到不同的XIB文件中,以便使用更少的内存。我已经这样做了,但是当我改变iPad的方向时,我的视图变成了空白。 我已尝试执行以下操作:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
self = [[MyController alloc] initWithNibName:@"MyControllerLandscape" bundle:nil];
}
但是它只是初始化视图,没有数据(没有图像,没有标签,…)。如何“卸载”当前视图并“加载”具有界面方向的新视图,以避免弹出视图并推送新视图

编辑:

我现在已经尝试过了,它或多或少起作用了:

[[NSBundle mainBundle] loadNibNamed:@"myPortraitView" owner:self options:nil];
[[NSBundle mainBundle] loadNibNamed:@"myLandscapeView" owner:self options:nil];

我现在的问题是:如果我在init方法上这样做,它会将两个视图都加载到内存中,还是只将一个引用加载到need时的视图中?

下面是一个通过导航控制器实现这一点的好例子:


这是一个很好的解决方案,但是(如果我错了,请纠正我),这家伙是不是为每个横向视图使用一个控制器,为纵向模式使用另一个控制器?我想做的是在内存中只加载一个视图(将显示的视图),然后删除另一个视图,以节省内存。使用这个例子,我只会在用户不旋转设备的情况下节省内存,是吗?塔克斯!这两个控制器将位于内存中,是的,但如果应用程序收到内存警告,非活动视图将能够卸载。我认为您可以仅在需要时(即,在将视图控制器推入导航控制器之前)创建视图控制器,并在弹出后释放它们。通过这种方式,内存中只有一个视图和一个控制器,但当然,每次设备旋转时加载视图可能会对性能造成影响-尽管我怀疑它是否会明显,除非您有非常复杂的视图。