如何解决正确的视图控制器的卸载/加载方式
|| 我是iOS的新手,想知道如何正确实现视图控制器的卸载/重新加载。 现在,我的应用程序有一个NavigationController,其中MainMenuViewController(自定义视图控制器)设置为根视图控制器。在应用程序生命周期内,新的ViewController会被推送/弹出到Navigation Controller上。这很好,在第一次将适当的ViewController(从NIB)启动到栈中时就启动了它们。 但是,我现在想在弹出一个特定的ViewController时卸载它,然后在再次按下它时自动重新加载它。 我在ViewControllersviewDidDisappear:
中添加了一个ѭ0并卸载了它,但是当我再次尝试推送视图时,我收到一条消息,消息发送到dealloc \'ed实例错误并崩溃。因此,我的问题是:
这是卸载弹出的ViewController的正确方法吗?
如何检查给定的ViewController是否已加载?
如何强制重装?用loadWithNib:
,然后推入导航堆栈?
问候,
彼得
解决方法
欢迎使用iOS编程。您的崩溃是内存管理问题。可能需要花点时间才能掌握它,但是如果您遵循一条规则,则内存管理会变得更容易:
一个对象需要释放它保留的任何东西(分配等于保留)
在这种情况下,您的视图控制器将释放自身,并且绝对不会保留自身。这是序列与导航控制器一起工作的方式:
导航控制器使用根视图控制器(其堆栈中的第一个)初始化。叫this3ѭ
用户操作告诉
firstViewController
初始化secondViewController
并将其推到导航控制器上。在大多数情况下,firstViewController
将其推入后将释放secondViewController
的实例。这时,ѭ9与完成done8。导航控制器现在保留secondVC
用户触摸ѭ9the导航栏上的后退按钮。导航控制器将从堆栈中弹出“ 9”并释放它。只要没有其他对象保留它,ѭ9将被取消分配。
现在用户回到is8ѭ。他们可以执行相同的用户操作,该操作将初始化并推送ѭ9的新实例。
希望那些对你有帮助。
我还建议您(重新)阅读Apple文档,并查看框架文档中引用的示例代码。
http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。