4

我即将创建一系列NSOperations 并在队列中运行它们。

它们都是顺序的,一次运行一个。

这些操作将从 Web 获取数据并创建和保存核心数据托管对象。

如何处理应用程序退出的情况?由于操作在分离线程中运行,我怎样才能让主线程等到当前操作“安全”退出?在某些情况下,我很高兴线程(操作)在它们完成之前退出,因为在进一步的应用程序启动时,作业将继续并从中断的地方继续。

非常感谢,

麦克风

4

2 回答 2

5

设计您的操作,以便他们isCancelled在适当的安全时间检查他们的财产(在开始时,操作的一个阶段完成后等)并在那时解救。在applicationWillTerminate中,向您的操作队列发送一条-cancelAllOperations消息,然后用一条消息跟进-waitUntilAllOperationsAreFinished。这将阻塞,直到队列中的所有操作都完成。如果所有操作都isCancelled正确处理,这应该不会减慢您的应用程序退出速度。

需要注意的一件事是-waitUntilAllOperationsAreFinished,当从 调用时applicationWillTerminate,会阻塞主线程。如果您的任何操作在主线程上执行选择器,您的应用程序将在该点冻结。

于 2009-10-14T17:56:17.483 回答
2

如果您的应用程序在指定时间内不自行退出,它将被强制退出。因此,等待一些数据从互联网上跌跌撞撞地进来可能不是一个好主意。

但你已经给了自己答案。只需通过设计使操作原子化。我的意思是您的操作应该完成工作(下载+保存数据),或者您在下次启动时再次运行它。如果应用程序在作业完成之前退出,请确保回滚作业的所有临时数据。

于 2009-10-14T15:25:20.993 回答