2012-01-16 43 views
2

自从我开始iOS开发之后,这个问题一直在我脑海里:UINavigationController和内存的使用。内存使用情况:什么时候使用UINavigationController以及何时不使用?

我看到很多应用程序,例如iMail,Find Friends,Notes等,其中UINavigationController非常合理。它们允许您向下钻取两到三层的层次结构,就是这样。

但想象一下从根文件夹开始浏览深层次结构,如Mac的文件系统。 如果我使用UINavigationController,我会继续推动堆栈上的数百个控制器(最糟糕的情况)。我不认为这是一个很好的用法。有些情况下推控制器可能会变得非常沉重(就内存而言),他们只是坐在那里没有任何东西。

我希望有一个“动态”版本的UINavigationController:它只会告诉你什么时候导航备份层次结构而不是弹出层次结构。

我现在的问题是:UINavigationController的意图是用于深层次?如果你想要所有的动画,酒吧项目等,有什么好的选择? 或者我看到没有任何问题?

回答

1

UINavigationController动态。当内存不足时,您可以释放部分层次结构中不可见的内存 - 当您获得较低的内存通知时,这是手动步骤 - 操作系统将自动在相同情况下释放视图。

当顶视图控制器弹出堆栈时,您的viewDidLoad方法将被调用,允许您重新创建视图。

如果确实存在问题,iOS5允许您创建自己的“容器”视图,因此您可以创建自己的导航控制器,其功能与您的建议完全相同。查看UIViewController文档的“实施容器视图控制器”部分。

话虽如此,您可能需要添加一些快捷方式,以在深层次结构中工作。如果您一次只能返回一个屏幕,UI可能会变得很痛苦。

+0

但是一个UIViewController实例在控制器堆栈上悬挂着多重?即使我发布了包括视图在内的所有可能的数据,仍然还有一些东西。或者是不值得讨论这些视图字节? – Krumelur 2012-01-16 12:53:59

+0

这将是你的属性/成员变量加上一些更多的“隐藏”变量开销。它不是零,但它不是很大。 – 2012-01-16 13:11:03

+0

另请参阅我的关于创建自己的UINavigationController的编辑。 – 2012-01-16 13:12:46

相关问题