iphone - 在一个线程中保存核心数据,退出前如何保证其写入完成?

标签 iphone objective-c xcode core-data

所以我将小图像保存到核心数据中,这需要真的很短的时间来保存,比如 0.2 秒,但我是在用户翻阅 ScrollView 时这样做的所以为了提高响应速度,我将保存移动到一个线程。这很好用,所有内容都已保存并且应用程序响应迅速。然而,核心数据+多线程doco中有一件事让我担心:

“在 Cocoa 中,只有主线程是不分离的。如果你需要在其他线程上保存,你必须编写额外的代码,这样主线程会阻止应用程序退出,直到所有保存操作完成。”

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

谢谢

最佳答案

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

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

关于iphone - 在一个线程中保存核心数据,退出前如何保证其写入完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2596087/

相关文章:

javascript:可以使用 touchmove 来模拟 iPhone 上的鼠标悬停吗?

objective-c - 核心数据是否在后台进行自己的类型转换?

ios - 如何检查核心数据类是否为零。在 SWIFT

c++ - 为什么在 XCode 中默认情况下循环展开?

ios - 带有自签名证书的 HTTPS iOS

ios - Protocol buffer 代码针对 iOS 模拟器进行编译,但不适用于设备

iPhone 私有(private) API 使用

ios - 在 iOS 9 中,为什么 SFSafariViewController 被推送而不是模态呈现?

ios - 滑出式菜单 VC 黑屏

iphone - 应用程序可以找到有关当前在 iPhone/iPod Touch 上播放歌曲的信息吗?