我正在使用ViewWillAppear,viewDidAppear,viewWillDisappear,UIViewController的viewDidDisappear。
我使用UINavigationController来导航视图控制器。
例如,我在viewWillAppear或viewDidAppear中创建NSTimer或注册通知。我使计时器无效或删除viewWillDisappear或viewDidDisappear中的通知。
但是如果没有调用那4个方法(viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear),程序将崩溃或保留循环。
我找不到文档说保证始终调用viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear。
直到现在,它们似乎总是被调用,我的程序按预期工作。
但是有没有调用4种方法的情况? 或者有可能通常会调用4种方法,但有时候没有理由随机调用吗?
答案 0 :(得分:3)
我可以说,viewWillAppear和viewDidAppear方法总是在视图中调用。 当您使用另一个视图更改视图或关闭视图时,将调用viewWillDisappear和viewDidDisappear方法。例如,如果您有一些滚动视图,则不会调用这些方法。
答案 1 :(得分:2)
是的,他们总是被召唤。如果你继承了一个视图控制器,请确保调用超类实现。
答案 2 :(得分:1)
我认为您可以相信这些方法,viewDidLoad
和dealloc
对我来说永远不会失败。
您可以在那里注册和删除通知。 但是,我不知道您的所有应用规范以及我推荐的内容可能都不可行。
答案 3 :(得分:1)
是视频事件总是触发,但是要覆盖必须声明它们的行为。
根据apple文档,不推荐使用viewDidUnload。
请查看此链接以获取UIViewController的官方Apple类参考
它声明:
UIViewController类提供在发生这些事件时调用的特定方法。子类可以覆盖这些方法来实现特定的行为。
答案 4 :(得分:0)
答案 5 :(得分:0)
除了一些方法可能无法被调用和/或调用两次(例如,一次解除/弹出多个控制器)之外的错误,使用iOS 7,如果你启动向后滑动手势,部分揭示了之前的导航堆栈中的控制器,然后取消向后滑动,以便不会发生弹出,您将观察到并非所有控制器都调用所有方法。