iOS并发编程—Operation Queues

翻译自Apple官方文档,让你见识一下什么叫翻译腔。

概述

Cocoa operations使用一种面向对象的思想,来提供一套执行异步操作的方法。Operations被设计用来结合operation queue或者它们自身来使用。由于Operations是基于Objective-C的,它们普遍用在OS X跟iOS中。

关于Operation对象

一个Operation对象是类NSOperation(in the Foundation framework)的一个实例.NSOperation类本身是一个抽象基类,必须要被子类继承来实现功能。尽管它是一个抽象类,NSoperation 提供了数目可观的基础方法实现,来让你需要在子类中实现的操作达到最少。另外,Foundation framework提供了两种具体的子类,你可以像使用自己的代码一样使用它们。下表列出了这些类,还有一些关于如何使用的概述

Class Description
NSInvocationOperation 可以把它一个基于程序中的对象以及selector创建的operation对象来使用。万一你已经实现了一个方法来实现一些操作,那么你可以使用这个类。因为它并不一定需要继承。你同样也能用它来以更加动态的方式创建operation对象。关于如何使用这个类,可以参照这里
NSBlockOperation 你可以用它来执行一个block对象或者并发执行多个block。因为它能够执行超过一个block,只有当所有相关的block都结束执行,这个operation才会被认为完成。
点击这里查看如何使用。在OS X v10.6以后可以使用。关于block的更多信息,点击这里
NSOperation 用于定义自定义的对象的基类。继承NSOperation让你能够实现自己的操作,你还能够替换默认的方法。点击这里查看更多。

所有的这些operation对象都支持下面这些重要特性:

  • 支持建立operation对象之间的基于图结构(离散数学中的图论)的依赖。这些依赖能够防止一个特定的operation一直运行到它所依赖的所有operation都结束才结束。关于更多的建立依赖的方法,点击这里
  • 支持可选的completion block,completion block在operation的主要任务完成之后将会执行(OS X v10.6以后)。点击这里查看设置completion block的信息。
  • 支持使用KVO通知机制来监听operation的执行状态变化。for more about kvo
  • 支持调整operation的优先级,因此能影响它们之间的相关执行顺序。改变operaiton的执行优先级
  • 支持cancel语法,让你可以停止某个正在执行的操作。如何取消operation如何支持自定义operation的取消操作

Operation被设计用来帮助你提高app的并发级别。operation同时也是一个将程序中的操作组织以及封装起来的好方法。你可以将一个或者多个operation对象放到队列中,让通信的操作在一个或者多个分离的线程中执行。

并发 VS 非并发 操作

虽然你很典型的将operation添加到操作队列中来执行它们,不过这并不是唯一的途径。你同样可以通过调用operation对象的star方法来让它执行,但是这样做并不保证operaiton能正确执行你余下的代码。NSOperation类中的isConcurrent方法能够告诉你某个operation是同步执行还是异步执行——与它的start方法被调用所在的线程之间。默认情况下,这个方法会返回NO,这意味着这个operation在调用它的线程中是同步执行的。
如果你想要实现一个并发操作——换句话说,与调用它的线程异步执行——你必须额外敲一些代码来异步开始一个operaiton。例如,你可能会生成一个单独的线程,调用一个异步的系统函数,或者做一些别的操作来确保start方法能马上开始某项人物并且在任务完成之前,start方法能立即返回。
大多数开发者应该永远都不需要自己来实现并发操作对象。如果你经常将你的operaiton添加到一个operation队列中,你不需要实现并发操作对象。当你提交一个非并发operation到一个operation队列中,队列自己会创建一个线程来执行你的operaiton。这样,将一个非并发operation添加到operation队列中仍然会导致你的operation对象中的代码被异步执行。定义一个并发operation只会被用于当你需要执行一些异步操作,但是并不将它们添加到一个operaiton队列中。
设置operation来并发执行NSOperation Class参考

(未完待续)



以上