2009-02-13 17 views
0

在我的应用程序开始时,我使用NIB初始化UIViewController。以编程方式从NIB设置视图属性(不在初始化过程中)

在某些时候,我从屏幕上删除视图,然后释放它,因此它不再占用内存。 (此时我也将视图的状态保存在UIViewController中)

稍后,我想重新创建视图并将其返回到屏幕上。然后我会恢复它的状态。 (使用相同的UIViewController,不是一个新的,因为它保存了状态)

我的问题是,当我重新创建视图,我该如何从NIB这样做,或者这是不可能的?

对我来说,很明显的补救措施是:

  1. 不要保存在的UIViewController状态(哪里惯例决定了我做保存状态?)

  2. 不要放开视图(也许只是释放所有它的子视图?)

  3. 不要从NIB加载我的看法,创建编程(似乎跟使用IB的一切)

注意: 我没有使用UINavigationController,我自己处理视图的交换,因为你只有2个。

回答

2

如果你需要这种控制水平,你真的不想使用IB。因为,正如你所指出的那样,如果删除视图然后重新创建视图,那么无论如何你都必须在代码中完成。只需设计IB中的大部分视图,然后编写一些代码即可生成此视图。然后,您可以稍后再次调用相同的方法,以便在需要时重新创建该视图。

您可能可以将其归档并在以后将其重新转换为对象,但这似乎是一个不合理的解决方案。 IB不允许在运行时动态创建控件,即使它们曾经存在但现在不再存在。对于这种情况,让IB离开循环并不是什么好事。实际上这可能是一个好主意。


OR

如果有很多条的复杂视图,把鉴于它自己的笔尖,使视图控制器它。然后,您可以简单地使用nib名称安装视图控制器,并将控制器视图作为子视图添加到主视图。然后你的视图控制器处理加载的笔尖,你可以在IB中进行设计。没有什么说视图控制器的视图也必须占用整个屏幕。

self.otherController = [[OtherController alloc] initWithNibName:@"Other" bundle:nil]; 
[self.view addSubview:otherController.view]; 
0

不要在相同的nib文件中创建视图控制器和视图;要么在代码中创建控制器,要么将视图放在单独的nib文件中。如果稍后将控制器的视图属性清零,控制器应该重新创建视图。

但是,为什么你这么担心呢?如果内存不足,已经有一种机制可以自动释放视图:低内存警告。如果你真的需要这样做,它只会破坏和重新创建视图,并且它被内置到系统中,所以你不必做任何事情。请记住关于过早优化的说法吗?

相关问题