UIApplicationWillTerminate:NSNotificationCenter 与 Application Delegate

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案1】:

这里有几点需要注意:

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

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

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

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

【讨论】:

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

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

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

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

【讨论】:

以上是关于UIApplicationWillTerminate:NSNotificationCenter 与 Application Delegate的主要内容,如果未能解决你的问题,请参考以下文章