作者刘文涛
转载请注明出处
一、NSOperation
1、简介
NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作。
NSOperation本身是抽象基类,因此必须使用它的子类,使用NSOperation子类的方式有两种:
1.Foundation框架提供了两个具体子类直接供我们使用:NSInvocationOperation和NSBlockOperation
2.自定义子类继承NSOperation,实现内部相应的方法
2、执行操作
NSOperation调用start方法即可开始执行操作,NSOperation对象默认按同步方式执行,也就是调用start方法的那个线程中直接执行。
NSOperation对象的isConcurrent方法会告诉我们这个操作相对于调用start方法的线程,是同步还是异步执行。isConcurrent默认是返回NO,表示操作与调用线程同步执行
|
|
3、取消操作
Operation开始执行之后,默认会一直执行操作直到完成,我们也可以调用cancel方法中途取消操作
|
|
4、监听操作的执行
如果我们想在一个NSOperation执行完毕后做一些事,就调用NSOperation的setCompletionBlock方法:
|
|
二、NSInvocationOperation
1.简介
基于一个对象和selector来创建操作。如果你已经有现有的方法来执行需要的任务,就可以使用这个类
2.创建并执行操作
|
|
在ViewDidLoad中使用我们自定义的operation,并调用start方法。
|
|
默认情况下,该OperaTion在当前调用start的线程中执行,其实如果我们创建多个自定义的LWTNoCurrentOperation,并放入NSOperationQueue中,这些任务也是并发执行的,只不过我们没有处理,线程执行完,KVO等操作。因此不建议在只实现main函数的情况下将其加入NSOperationQueue,只实现main一般只适合自定义非并发的NSOperation。
|
|