objective-c - 内存使用 : when does it make sense to use a UINavigationController and when not?

标签 objective-c ios uinavigationcontroller

自从我开始进行 iOS 开发以来,这个问题就一直在我脑海中萦绕:UINavigationController 和内存的使用。

我看到很多应用程序,如 iMail、查找 friend 、笔记等,其中 UINavigationController 非常适合。它们允许您向下钻取两层或三层层次结构,仅此而已。

但想象一下从根文件夹开始浏览一个深层层次结构,例如 Mac 的文件系统。 如果我使用 UINavigationController,我会继续将数百个 Controller 插入堆栈(最坏的情况)。我不认为这是一个很好的用法。在某些情况下,推送的 Controller 可能会变得非常重(就内存而言)并且它们只是无所事事地坐在那里。

我希望 UINavigationController 有一个“动态”版本:它只会告诉您在返回层次结构时要创建什么,而不是仅仅弹出层次结构。

我现在的问题是:UINavigationController 是否用于深层层次结构?如果您想要所有的动画、栏项目等,有什么好的选择? 还是我看到了根本没有的问题?

最佳答案

UINavigationController 动态的。当内存不足时,您可以释放不可见的层次结构部分使用的内存——当您收到内存不足通知时,这是一个手动步骤——操作系统会在相同情况下自动释放 View 。

当顶 View Controller 从堆栈中弹出时,您的 viewDidLoad 方法将被调用,允许您重新创建 View 。

如果这确实是个问题,iOS5 允许您创建自己的“容器” View ,因此您可以创建自己的导航 Controller ,完全按照您的建议进行操作。查看 UIViewController 文档的“实现容器 View Controller ”部分。

话虽如此,您可能需要添加一些快捷方式来绕过非常深的层次结构。如果一次只能返回一个屏幕,用户界面可能会很痛苦。

关于objective-c - 内存使用 : when does it make sense to use a UINavigationController and when not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8879701/

相关文章:

uiviewcontroller - 切换到另一个 View ,但保留在导航 Controller 中

ios - 键盘打开时推送到其他 View Controller

iphone - 当键盘弹出时如何使 UITableView 动画化?

ios - 如何有效动态地改变字典的字典值

android - 使用路由和在 map 功能上添加位置,它们是标准包的一部分吗?

ios - 如何使用StreamingKit保存流音频?

ios - 为什么我的后退按钮在 iOS 7 上不起作用?

ios - 如何键入自动完成中显示的方法名称的下一部分?

iphone - 检查时间和日期是否在特定日期和时间之间

objective-c - 不同的 C++ include 语句在 Objective-C header 中抛出错误