【问题标题】:iPhone Dev - Multi-View App lazy loadingiPhone Dev - 多视图应用延迟加载
【发布时间】:2009-08-02 04:05:10
【问题描述】:

(只是让你知道我正在学习为 iphone 开发,没有界面生成器)

我正在编写我的第一个多视图应用程序,它有一个根视图控制器和两个其他视图控制器,并且根视图控制器使用延迟加载,所以当 viewDidLoad 时,它会创建第一个视图控制器并将其视图添加到子视图,但是在需要之前不会创建另一个。但是,在第二个加载完成后,它们都将停留在那里直到应用程序结束(除非它收到内存警告)。

所以我想知道:当用户切换两个视图时,我是否应该卸载另一个正在删除的视图(通过将其设置为 nil - 它是一个保留属性)?所以每次用户点击按钮时,当前的viewcontroller都会被卸载(在从superview中移除之后)并且下一个被加载并添加为子view?

所以这是正确的做法,还是正确的做法,但只有当应用程序有很多视图并且我的视图不够复杂而无法证明这样做是正确的,或者这样做根本就不好,我应该只是让 didReceiveMemoryWarning 处理它(在 didReceiveMemoryWarning 中,我将当前未显示的视图控制器设置为 nil)?

【问题讨论】:

    标签: iphone uiviewcontroller lazy-loading


    【解决方案1】:

    答案真的取决于。通常,您应该释放并设置为 nil 不显示的视图,但如果用户要经常在它们之间切换,您可能希望保留隐藏的视图(缓存)。

    您并不真的希望您的应用程序将用户的手机推送到 didReceiveMemoryWarning。当您收到该警告时,手机中正在发生其他事情,可能会导致您的应用程序在 iPhone 转储缓存的 Safari 页面、缓存的 UIImageView 对象等时冻结片刻......这个过程可能会引起最终用户和您的注意应用程序可能没有应有的流畅感。

    同样重要的是要记住,有些用户可能正在使用第一代 iPhone、iPod Touch 和 3G,因此他们不会拥有 3GS 的额外内存。

    话虽如此,我在保守内存方面犯了错误,所以我会释放并取消视图,然后在用户想要查看它时重新实例化它。由于 didReceiveMemoryWarning 引起的分配视图与系统清理的影响通常会小得多。

    【讨论】:

    • 好的,谢谢。我的意思是让 didReceiveMemoryWarning 来处理它,而不是像这个应用程序那样。
    • Tab bar 控制器怎么样,如果不重写它就很难卸载不显示的视图..
    • 我认为您可以使用 viewDidDisappear 释放视图,并使用 viewDidAppear 重建它。从技术上讲,这是最有效的方法,标签栏控制器按住 UIViewController 恕我直言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2011-02-10
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    相关资源
    最近更新 更多