核心数据并发(NSOperation)

3 iphone multithreading core-data objective-c nsoperation

在Apple 文档中写道:

...您应该在main(用于串行队列)或启动(用于并发队列)中创建上下文.

但我真的没有得到有什么区别.为什么我不能main为并发队列创建上下文?我试过了,它的工作原理和我做的完全相同start.

还有一件事让我感到困惑.从开始方法的文档:

...如果要实现并发操作,则必须覆盖此方法并使用它来启动操作.

所以,为什么我不能初始化所有内容main(或者可能不应该初始化)?

sku*_*kue 5

您所谓的"上下文"和"并发"之间可能存在差异,而Apple的术语含义也不同.他们以特定(且令人困惑)的方式使用"并发".使用NSOperation管理并发的这一部分可能会有所帮助:

有许多不同的方法可以使用NSOperation,但最常见的是编写自定义子类并覆盖一个方法:main.当NSOperationQueue计划运行时,调用main方法执行操作.以这种方式编写的NSOperation类称为非并发操作,因为开发人员不负责生成线程 - 多线程全部由超类处理.(不要被术语混淆:仅仅因为操作是非并发的,并不意味着它不能同时执行,它只是意味着你不必自己处理并发.)

如果您需要更多地控制线程和操作的运行时环境,则可以使用并发操作.为此,您继承NSOperation并覆盖start方法.在start方法中,您可以在调用main方法之前生成线程并设置环境.您还需要通过设置isExecuting和isFinished等属性来维护NSOperation的状态.简而言之,并发操作可以为您提供更多控制,但也需要更多的努力 - 对于大多数任务而言,非并发操作就足够了.