Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将核心数据保存在线程中,如何确保其在退出前完成写入?_Iphone_Objective C_Xcode_Core Data - Fatal编程技术网

Iphone 将核心数据保存在线程中,如何确保其在退出前完成写入?

Iphone 将核心数据保存在线程中,如何确保其在退出前完成写入?,iphone,objective-c,xcode,core-data,Iphone,Objective C,Xcode,Core Data,因此,我将小图像保存到核心数据中,这需要非常短的时间来保存,例如。2秒,但我在用户浏览滚动视图时进行保存,因此为了提高响应速度,我将保存移动到线程中。这非常有效,一切都得到保存,应用程序响应迅速。然而,核心数据+多线程doco中有一件事让我担心: 在Cocoa中,只有主线程未分离。如果需要在其他线程上保存,则必须编写其他代码,以便主线程在所有保存操作完成之前阻止应用程序退出 好的,你是怎么做到的?它只需要持续约0.2秒,而且这种情况很少发生,因为应用程序退出的可能性非常低,因为正在保存某些内容。

因此,我将小图像保存到核心数据中,这需要非常短的时间来保存,例如。2秒,但我在用户浏览滚动视图时进行保存,因此为了提高响应速度,我将保存移动到线程中。这非常有效,一切都得到保存,应用程序响应迅速。然而,核心数据+多线程doco中有一件事让我担心:

在Cocoa中,只有主线程未分离。如果需要在其他线程上保存,则必须编写其他代码,以便主线程在所有保存操作完成之前阻止应用程序退出

好的,你是怎么做到的?它只需要持续约0.2秒,而且这种情况很少发生,因为应用程序退出的可能性非常低,因为正在保存某些内容。我如何在主线程上运行一些东西来防止应用程序退出并且不阻塞gui


谢谢

让您的保存线程设置一个“save in progress”标志,并让主线程检查应用程序代理的applicationWillTerminate:method。显然,您需要使用互斥来同步两个线程之间对标志的访问


如果应用程序试图退出时正在进行保存,则主线程执行pthread_cond_wait;保存完成后,保存线程将使用pthread\u cond\u信号将其唤醒。

在这里阅读文档似乎可以工作,我会尝试一下,谢谢!你愿意扩展你的答案并给出一个例子吗?我正试图找出如何设置这个,但找不到一个例子。我在其中设置了一个标志,标志设置为false,“threadDone”将其设置为true。在模拟器中工作得很好,但从iTunes下载后就不行了。@James这里简单地说就是我所做的:不仅仅是设置一个标志,而是一个应用程序标志。有关beginBackgroundTaskWithExpirationHandler的更多信息,请访问