好的,这是非常基本的,但是我已经一遍又一遍地阅读了文档,并希望确保我理解正确。用通俗易懂的语言讲,我的watchkit应用将因退出用户代码外部应用的某些用户交互而关闭,对吗?我不需要使用任何将其设置为再次运行的关闭程序来清除或重置屏幕?我不需要建立“退出”或“关闭应用”例程,对吗?这令人困惑,因为文档暗示该应用程序一旦不再显示在屏幕上(可能是由于用户操作(例如,滑动到另一个应用程序)而将被停用),并且将调用 didDeactivate 函数。但是文档还声称:

在iOS模拟器中,WatchKit会为当前对象调用didDeactivate方法
通过选择“硬件”>“锁定”锁定模拟器时的接口控制器。
当您随后解锁模拟器时,WatchKit会调用该界面
控制器的willActivate方法。您可以使用此功能进行调试
您的激活和停用代码。

但是模拟器似乎并没有以任何方式释放内存,重置变量或重置我的应用程序。在锁定时的状态下,它在屏幕上保持不变,在我解锁时又恢复到该状态。让我担心的是,如果我错了,那么我会运行一个应用程序。但是我看不到关闭例程,屏幕间隙或常规关闭例程中您期望的任何元素。

最佳答案

我同意该文档可能会造成混淆。最简单的思考方法是,只要显示/激活接口控制器,就会调用willActivate。同样,didDeactivate每当隐藏/停用时都会调用。因此,如果您要遍历控制器的页面,则每个控制器在显示时都会收到willActivate,在消失时会收到didDeactivate。同样,如果由于不再可见该应用程序(例如该应用程序已被暂停)而停用了控制器,则会调用didDeactivate。如果用户然后举起手腕以恢复该应用程序,则会调用willActivate,因为正在显示界面控制器。

对于您的WatchKit应用程序是否将被挂起或终止(取决于操作系统),没有任何保证,因此您必须考虑这两种可能性。根据经验,我知道放下手臂会在挂起应用程序之前调用didDeactivate。如果您随后举起手腕,该应用将继续运行并调用willActivate。在我的测试中,在这种情况下,该应用只是被暂停(未终止)。

您是正确的,没有终止应用程序时调用的内置方法。但是,iOS 8.2添加了四个通知,可用于监视应用程序/扩展的状态:

  • NSExtensionHostDidBecomeActiveNotification
  • NSExtensionHostDidEnterBackgroundNotification
  • NSExtensionHostWillEnterForegroundNotification
  • NSExtensionHostWillResignActiveNotification
  • 关于ios - 从Watchkit应用退出是由Watchkit操作系统本身处理的,我不需要清除或重置屏幕吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29635072/

    10-12 05:48