iOS*_*com 3 concurrency cocoa multithreading objective-c grand-central-dispatch
我使用NSInvocationOperation
与NSOperationQueue
在iOS5的发展.根据关于调用对象的 apple文档:
NSInvocationOperation类是NSOperation的具体子类...此类实现非并发操作.
好的,所以我的NSInvocationOperation
对象同步执行?(在此纠正我)Apple的文档也说明了操作队列对象:
在iOS中,操作队列不使用Grand Central Dispatch来执行操作.它们为非并发操作创建单独的线程,并从当前线程启动并发操作.
我正在使用NSInvocationObject
,这是一个非并发对象,并将其添加到操作队列,如下所示:
[operationQueue addOperation:operation];
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:1)由于操作队列将产生一个单独的线程来执行文档中所说的NSInvocationObject,它是否会异步运行而不是同步运行?
[更新 - 回应Dani的回答如下.取自Apple链接.
NSOperation和NSOperationQueue
有许多不同的方法可以使用NSOperation,但最常见的是编写自定义子类并覆盖一个方法:main.当NSOperationQueue计划运行时,调用main方法执行操作.以这种方式编写的NSOperation类称为非并发操作,因为开发人员不负责生成线程 - 多线程全部由超类处理.(不要被术语混淆:仅仅因为操作是非并发的,并不意味着它不能同时执行,它只是意味着你不必自己处理并发.)
如果您需要更多地控制线程和操作的运行时环境,则可以使用并发操作.为此,您继承NSOperation并覆盖start方法.在start方法中,您可以在调用main方法之前生成线程并设置环境.您还需要通过设置isExecuting和isFinished等属性来维护NSOperation的状态.简而言之,并发操作可以为您提供更多控制,但也需要更多的努力 - 对于大多数任务而言,非并发操作就足够了.
如果将其添加到操作队列,它将相对于其余代码异步运行,但在操作队列上同步运行.它非常像:
With synchronous objects: Creating thread | |\ | \______ | | | Operation A | | | Operation B | | | | With asynchronous objects: Creating thread | |\ | \___________________ | | |\ Operation A | \______ | | | | | Operation B | | | | | | |
归档时间: |
|
查看次数: |
1202 次 |
最近记录: |