【问题标题】:Saving core data in a thread, how to ensure its done writing before quitting?将核心数据保存在线程中,如何确保在退出前完成写入?
【发布时间】:2010-04-07 21:31:21
【问题描述】:

所以我将小图像保存到核心数据中,这需要真的很短的时间来保存,比如 0.2 秒,但我是在用户翻阅滚动视图时这样做的所以为了提高响应能力,我将保存移动到一个线程。这很好用,一切都得到了保存,应用程序响应迅速。但是,core-data + multithreading doco 中有一点让我担心:

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

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

谢谢

【问题讨论】:

    标签: iphone objective-c xcode core-data


    【解决方案1】:

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

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

    【讨论】:

    • 阅读这里的 doco 看起来可以,我会试一试,谢谢!
    • 你愿意扩展你的答案并举个例子吗?我正在尝试找出如何设置它,但找不到示例。我设置了一个标志设置为false,并且“threadDone”将其设置为true。在模拟器中运行良好,但从 iTunes 下载后就不行了。
    • @James 简而言之,这是我所做的:pastie.org/4663834 它不只是设置一个标志,它是一个应用程序标志。你可以找到更多关于 beginBackgroundTaskWithExpirationHandler 的信息:developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2017-02-09
    相关资源
    最近更新 更多