2010-04-07 71 views
4

因此,我将小图像保存为核心数据,这需要很短的时间才能保存,比如0.2秒,但用户在浏览滚动视图时需要这么做,以便提高响应速度我正在将保存移到一个线程。这很好,一切都得到保存,应用程序响应。然而,在core-data + multithreading doco中有一件事令我担心:在线程中保存核心数据,如何确保在退出前完成写入操作?

“在Cocoa中,只有主线程没有被分离,如果你需要保存在其他线程上,你必须编写其他代码主线程可以防止应用程序退出,直到完成所有保存操作。“

好的,你是怎么做到的?它只需要持续〜0.2秒,而且很少会发生,因为应用程序退出的机会非常低。我如何在主线程上运行一些防止应用程序退出并且不会阻止gui的东西?

感谢

回答

3

让您保存线程设置一个“保存正在进行”标志,并有主线程检查,在应用程序委托的applicationWillTerminate:方法。显然,你需要使用一个互斥锁来同步两个线程之间的标志访问。

如果应用程序尝试退出时正在进行保存,主线程将执行pthread_cond_wait;一旦保存完成,保存线程将使用pthread_cond_signal将其唤醒。

+0

阅读这个doco看起来像它会工作,我会给它一个去感谢! – Shizam 2010-04-08 15:10:33

+1

你愿意扩大你的答案并举个例子吗?我试图找出如何设置这个,但我无法找到一个例子。我设置了一个标志被设置为false的地方,并且“threadDone”将其设置为true。在模拟器中工作良好,但从iTunes下载后无法正常工作。 – James 2011-12-28 16:41:23

+0

@James这就是我所做的一切:http://pastie.org/4663834它不只是设置一个标志,它的一个应用程序标志。你可以找到更多关于beginBackgroundTaskWithExpirationHandler:在http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html – Shizam 2012-09-04 18:57:42

相关问题