代码之家  ›  专栏  ›  技术社区  ›  jo

从内存中卸载XIB

  •  1
  • jo  · 技术社区  · 16 年前

    下面是我的设置:

    • 用户旋转pikerwheel,选择要导航到应用程序的哪个部分。
    • 该应用程序从XIB文件加载uiviewController并将其推送到导航控制器堆栈中。
    • 用户可以随时弹出并选择要导航到的另一个部分-viewcontroller(应该)已完全销毁并重新分配给新的xib文件。

    这看起来很简单,但是每个部分都是非常资源密集型的。当XIB弹出时,我找不到一个完全清除内存中XIB的好方法-我只尝试调用[ViewController Release],当它工作并最终调用uiviewController子类的-(void)dealloc方法时,XIB文件中的一些内容仍保留在内存中(我可以在ObjectAllocations中看到它们,我可以看到在ActivityMonitor中留下了大量内存)。

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

    1 回复  |  直到 16 年前
        1
  •  6
  •   Rob Napier    16 年前
    viewController.view = nil;
    

    如果 view 在NIB控制的uiviewController上为nil,则下次请求时将自动重新加载NIB。这正是 -didReceiveMemoryWarning 作品。

    当我更多地思考这个问题时,这不会立即降低你的iboutlets,在你的情况下,这可能很重要。因此,您还需要为iboutlets实现特殊的内存管理,如中所述。 Memory Management of Nib Objects .

    你需要实施 -setView: 如上所述。仔细阅读整个文档。我写了一份关于 Memory Managing IBOutlets .