我即将创建一系列NSOperation
s 并在队列中运行它们。
它们都是顺序的,一次运行一个。
这些操作将从 Web 获取数据并创建和保存核心数据托管对象。
如何处理应用程序退出的情况?由于操作在分离线程中运行,我怎样才能让主线程等到当前操作“安全”退出?在某些情况下,我很高兴线程(操作)在它们完成之前退出,因为在进一步的应用程序启动时,作业将继续并从中断的地方继续。
非常感谢,
麦克风
我即将创建一系列NSOperation
s 并在队列中运行它们。
它们都是顺序的,一次运行一个。
这些操作将从 Web 获取数据并创建和保存核心数据托管对象。
如何处理应用程序退出的情况?由于操作在分离线程中运行,我怎样才能让主线程等到当前操作“安全”退出?在某些情况下,我很高兴线程(操作)在它们完成之前退出,因为在进一步的应用程序启动时,作业将继续并从中断的地方继续。
非常感谢,
麦克风
设计您的操作,以便他们isCancelled
在适当的安全时间检查他们的财产(在开始时,操作的一个阶段完成后等)并在那时解救。在applicationWillTerminate
中,向您的操作队列发送一条-cancelAllOperations
消息,然后用一条消息跟进-waitUntilAllOperationsAreFinished
。这将阻塞,直到队列中的所有操作都完成。如果所有操作都isCancelled
正确处理,这应该不会减慢您的应用程序退出速度。
需要注意的一件事是-waitUntilAllOperationsAreFinished
,当从 调用时applicationWillTerminate
,会阻塞主线程。如果您的任何操作在主线程上执行选择器,您的应用程序将在该点冻结。
如果您的应用程序在指定时间内不自行退出,它将被强制退出。因此,等待一些数据从互联网上跌跌撞撞地进来可能不是一个好主意。
但你已经给了自己答案。只需通过设计使操作原子化。我的意思是您的操作应该完成工作(下载+保存数据),或者您在下次启动时再次运行它。如果应用程序在作业完成之前退出,请确保回滚作业的所有临时数据。