【问题标题】:UIApplicationWillTerminate: NSNotificationCenter vs Application DelegateUIApplicationWillTerminate:NSNotificationCenter 与 Application Delegate
【发布时间】:2012-02-16 00:10:29
【问题描述】:

这只是一个理论问题。它源于我的应用程序中的一个真正问题,但我从应用程序中重新设计了这个问题。但问题仍然存在:

如果在我的应用程序委托中,我在 applicationWillTerminate: 上将我的单例对象写入磁盘,但也在某些视图控制器中使用 NSNotificationCenterUIApplicationWillTerminateNotification 上调用 updateSingletonData,这将首先发生?我的数据会被写入单例,然后单例被写入磁盘,然后应用程序终止吗?或者相反的情况会发生,单例被序列化并且然后单例更新(更糟),或者如果序列化时间太长,应用程序会在一定时间后终止(更糟!) ?

我想这表明我对 Springboard 的核心缺乏了解......感谢任何可以在这里阐明的人。

【问题讨论】:

    标签: objective-c ios uiapplicationdelegate nsnotificationcenter springboard


    【解决方案1】:

    这里有几点需要注意:

    1. 只有 Apple 知道这些发生的顺序,因为他们编写了执行此操作的代码。

    2. 您不应该关心这些发生的顺序。如果您关心,那么您的代码设计得很糟糕。

    实际上,您可以检查发生的顺序 - 对于您的特定设备、特定 iOS 版本等。

    但实际上,您不应该关心它们发生的顺序。从它的声音来看,您应该在保存到 applicationWillTerminate: 之前启动视图控制器以写入数据,或者让视图控制器处理写入数据后保存。

    【讨论】:

    • 基本上听起来应该没关系...我会自己做一些测试,感谢您的帮助!
    【解决方案2】:

    这个问题很老,@mattjgalloway 的回答在代码质量方面是正确的,但为了知识起见,我刚刚在文档中看到通知是在@之后发布的 987654322@方法被调用(强调我的):

    调用此方法后,应用还会发布 UIApplication​Will​Terminate 通知,让感兴趣的对象有机会响应过渡。

    https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623111-applicationwillterminate

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多