为核心数据编写创建后台线程

时间:2012-11-26 19:29:04

标签: objective-c ios multithreading core-data save

我正在尝试重新创建此cocoanetics文章(http://www.cocoanetics.com/2012/07/multi-context-coredata/)中描述的三层核心数据系统。我遇到的问题是在自己的后台线程上创建私有MOC。我对多线程有很多经验,如何在目标c中完成。我一直在阅读文章并试图掌握如何正确实施这种方法,但我终于承认我不知道自己在做什么。

要创建此方法,我是否需要创建NSThread并对其进行管理?或者有一种我不理解的简单方法吗?

2 个答案:

答案 0 :(得分:5)

在后台执行Core Data操作的最简单方法是创建NSPrivateQueueConcurrencyType的托管对象上下文。此类型的MOC创建和管理专用队列。使用performBlockperformBlockAndWait在私有MOC上执行操作可确保使用正确的队列。

参见Concurrency Support for Managed Object Contexts 有关详细信息和示例,请参阅 OS X v10.7和iOS 5.0的核心数据发行说明

我只能建议观看WWDC 2011 Session 303中的视频或幻灯片“iOS在iOS上核心数据中的新功能”,其中解释了核心数据的并发性。

答案 1 :(得分:-3)

管理线程在iOS中非常基础

要在后台运行某些内容,您需要这样:

- (void)someMethod {
    // method is called on main thread normally

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        .... // here things are run in background
    });
}

要在任何地方返回主线程,请执行以下操作:

- (void)someOtherMethod {
    // method is called on background thread

    dispatch_async(dispatch_get_main_queue(), ^{
        ... // here things are on main thread again
    });
}