我在iOS5中使用NSInvocationOperation
NSOperationQueue
进行开发。
根据关于调用对象的Apple文档:
NSInvocationOperation类是其中的具体子类 NSOperation ...此类实现非并发操作。
好的,我的NSInvocationOperation
对象是否同步执行? (在此纠正我)Apple的文档也说明了操作队列对象:
在iOS中,操作队列不使用Grand Central Dispatch执行 操作。它们为非并发操作创建单独的线程 并从当前线程启动并发操作。
我正在使用NSInvocationObject
,这是一个非并发对象,并将其添加到操作队列中,如下所示:
[operationQueue addOperation:operation];
所以我的问题是:1)由于操作队列将产生一个单独的线程来执行文档中所说的NSInvocationObject,它是否会异步运行而不是同步运行?
[更新 - 回应Dani的回答如下。取自Apple link。
NSOperation和NSOperationQueue
有许多不同的方法可以使用NSOperation,但是 最常见的是编写自定义子类并覆盖一个方法: 主要。调用main方法时执行操作 NSOperationQueue安排它运行。写的NSOperation课程 这种方式称为非并发操作,因为开发人员 不负责产生线程 - 多线程都处理完毕 由超级班。 (不要被术语混淆:只是 因为一个操作是非并发的,并不意味着它不可能 同时执行,它只是意味着你不必处理 你自己的并发。)
如果您需要更多地控制线程和运行时环境 对于您的操作,您可以使用并发操作。去做 这个,你继承NSOperation并覆盖start方法。在里面 启动方法,您可以生成线程并设置环境 调用main方法。您还需要维持该州 通过设置isExecuting和等属性来设置NSOperation isFinished。简而言之,并发操作可以为您提供更多帮助 控制,但也需要更多的努力 - 大多数任务非并发 操作就够了。
答案 0 :(得分:9)
如果将其添加到操作队列,它将相对于其余代码异步运行,但在操作队列上同步运行。 它非常像:
With synchronous objects: Creating thread | |\ | \______ | | | Operation A | | | Operation B | | | | With asynchronous objects: Creating thread | |\ | \___________________ | | |\ Operation A | \______ | | | | | Operation B | | | | | | |