【问题标题】:Unloading XIB from memory从内存中卸载 XIB
【发布时间】:2009-05-17 01:35:27
【问题描述】:

这是我的设置:

  • 用户旋转 PickerWheel,选择要导航到应用程序的哪个部分。
  • 应用从 XIB 文件加载 UIViewController 并将其推送到 navigationController 堆栈
  • 用户可以随时弹回并选择要导航到的另一个部分 - viewController 已(应该)完全销毁并重新分配给新的 XIB 文件

看起来很简单,但是这些部分中的每一个都非常耗费资源。当 XIB 弹回时,我找不到完全清除内存的好方法 - 我尝试只调用 [viewController release],虽然它工作并最终调用 UIViewController 子类的 -(void)dealloc 方法, XIB 文件中的一些内容仍然保留在内存中(我可以在 ObjectAllocations 中看到它们,我可以在 ActivityMonitor 中看到大量剩余内存)。

基本上我要问的是从内存中完全删除动态加载的 XIB 的最佳方法是什么?

【问题讨论】:

    标签: iphone


    【解决方案1】:
    viewController.view = nil;
    

    如果 view 在 NIB 控制的 UIViewController 上为 nil,那么它会在下次请求时自动重新加载 NIB。这正是-didReceiveMemoryWarning 的工作原理。

    当我更多地考虑这一点时,这不会立即删除您的 IBOutlets,这在您的情况下可能很重要。所以你还需要实现Memory Management of Nib Objects中描述的IBOutlets的特殊内存管理。

    您需要按照说明实现-setView:。仔细阅读整个文档。我已经在Memory Managing IBOutlets 中快速总结了要点。

    【讨论】:

    • 哇。三个字抵消了三个小时的工作:P 先生,您是冠军。非常感谢。
    • 这可能是 StackOverFlow - iPhone 上最重要的帖子之一。 Rob Napier 是我的 MVP。如果您正在做任何需要复杂 Navigation 和 UIViewControllers 的事情,请,请,请注意这篇文章!谢谢罗!
    • 什么????!!为什么这不是在 SDK 文档顶部用红色粗体字写的?这篇文章对我帮助很大。知道我理解为什么我的应用程序没有释放所有内存
    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 2011-10-13
    • 1970-01-01
    • 2013-08-14
    • 2017-08-02
    • 2019-04-30
    • 2013-12-14
    • 1970-01-01
    相关资源
    最近更新 更多