我是iOS新手,想知道如何正确实现视图控制器卸载/重新加载。
现在我的应用程序有一个NavigationController,其MainMenuViewController(自定义视图控制器)设置为根视图控制器。在应用程序生命周期的过程中,新的ViewControllers将在导航控制器上推送/弹出。这很好用,第一次将它们推送到堆栈时,会启动相应的ViewControllers(来自NIB)。
但是,我现在想要在弹出时卸载一个特定的ViewController,然后在再次推送时自动重新加载它。
我已经向ViewControllers [self release]
添加了viewDidDisappear:
并卸载了,但是当我尝试再次推送视图时,我收到一条消息,发送到dealloc'ed实例错误并崩溃。因此,我的问题是:
loadWithNib:
,然后推送到导航堆栈?此致
彼得
答案 0 :(得分:3)
欢迎使用iOS编程。您的崩溃是一个内存管理问题。可能需要一些时间来掌握它,但如果您只遵循一条规则,内存管理会变得更容易:
对象需要释放它保留的任何内容(alloc等同于保留)
在这种情况下,您的视图控制器正在释放它,它肯定没有保留自己。以下是序列如何与导航控制器一起使用:
使用根视图控制器(其堆栈中的第一个)初始化导航控制器。让我们称之为firstViewController
用户操作告诉firstViewController
初始化secondViewController
并将其推送到导航控制器。在大多数情况下,firstViewController
会在推送secondViewController
之后释放它。此时,firstVC
已完成secondVC
。导航控制器现在保留secondVC
用户触摸secondVC
导航栏上的后退按钮。导航控制器将从堆栈弹出secondVC
并释放它。只要没有其他对象保留它,secondVC
就会被释放。
现在用户又回到了firstVC
。他们可以执行相同的用户操作,该操作将初始化并推送secondVC
的新实例。
希望有所帮助。
我还建议您(重新)阅读Apple文档并查看框架文档中引用的示例代码。