UIApplicationWillTerminate:NSNotificationCenter 与 Application Delegate
Posted
技术标签:
【中文标题】UIApplicationWillTerminate:NSNotificationCenter 与 Application Delegate【英文标题】:UIApplicationWillTerminate: NSNotificationCenter vs Application Delegate 【发布时间】:2012-02-16 00:10:29 【问题描述】:这只是一个理论问题。它源于我的应用程序中的一个真正问题,但我从应用程序中重新设计了这个问题。但问题仍然存在:
如果在我的应用程序委托中,我在 applicationWillTerminate:
上将我的单例对象写入磁盘,但也在某些视图控制器中使用 NSNotificationCenter
在 UIApplicationWillTerminateNotification
上调用 updateSingletonData
,这将首先发生?我的数据会被写入单例,然后单例被写入磁盘,然后应用程序终止吗?或者相反的情况会发生,单例被序列化并且然后单例更新(更糟),或者如果序列化时间太长,应用程序会在一定时间后终止(更糟!) ?
我想这表明我对 Springboard 的核心缺乏了解......感谢任何可以在这里阐明的人。
【问题讨论】:
【参考方案1】:这里有几点需要注意:
只有 Apple 知道这些发生的顺序,因为他们编写了执行此操作的代码。
您不应该关心这些发生的顺序。如果您关心,那么您的代码设计得很糟糕。
实际上,您可以检查发生的顺序 - 对于您的特定设备、特定 ios 版本等。
但实际上,您不应该关心它们发生的顺序。从它的声音来看,您应该在保存到 applicationWillTerminate:
之前启动视图控制器以写入数据,或者让视图控制器处理写入数据后保存。
【讨论】:
基本上听起来应该没关系...我会自己做一些测试,感谢您的帮助!【参考方案2】:这个问题很老,@mattjgalloway 的回答在代码质量方面是正确的,但为了知识起见,我刚刚在文档中看到通知是在@之后发布的 987654322@方法被调用(强调我的):
调用此方法后,应用还会发布 UIApplicationWillTerminate 通知,让感兴趣的对象有机会响应过渡。
https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623111-applicationwillterminate
【讨论】:
以上是关于UIApplicationWillTerminate:NSNotificationCenter 与 Application Delegate的主要内容,如果未能解决你的问题,请参考以下文章