【问题标题】:Memory usage: when does it make sense to use a UINavigationController and when not?内存使用:什么时候使用 UINavigationController 有意义,什么时候没有?
【发布时间】:2012-01-16 11:59:27
【问题描述】:

自从我开始进行 iOS 开发以来,我就一直在想这个问题:UINavigationController 和内存的使用情况。

我看到很多应用程序,如 iMail、Find Friends、Notes 等,其中 UINavigationController 非常有用。它们允许您深入了解两个或三个层次结构,仅此而已。

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

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

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

【问题讨论】:

    标签: objective-c ios uinavigationcontroller


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 但是一个 UIViewController 实例挂在控制器堆栈上的重量有多大?即使我发布了所有可能的数据,包括视图,仍然有一些东西。还是不值得讨论这些视图字节?
    • 这将是您的属性/成员变量加上更多的“隐藏”变量开销。它不是零,但不是很大。
    • 另见我关于创建自己的 UINavigationController 的编辑。
    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 2013-10-07
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多