前言
iOS实现多线程的方式主要有三种,分别是NSThread、NSOperation、GCD。对于其他更底层的方式,我们通常不会使用到,特别厉害的高手才会去使用最底层的API。我们这里一起来学习NSOperationQueue和NSOperation相关知识。
关于GCD方面的知识,如果感兴趣,可以到GCD深入浅出学习阅读,这篇文章是专门讲GCD的,知识点也是慢慢深入。
简介
NSOperation封装了需要执行的操作和执行操作所需的数据,提供了并发或非并发操作,可以设置最大并发数,取消操作等。
iOS使用NSOperation的方式有两种:
直接使用系统提供的两个子类:NSInvocationOperation和NSBlockOperation
继承于NSOperation,自定义操作
我们日常在项目中,通常使用Operation使用自定义方式比较多,对于我个人而言,一直都是使用自定义的。比较做上传、下载功能,都会自定义Operation。
注意:大家都说NSOperation是抽象类,这里所说的抽象类不是真正的抽象类,不像C++那种纯虚函数,不能实例化。在Ojbective-C中是没有纯虚函数的,因此它是可以实例化的。只是由于没有提供任务接口,因此实例化了也没有意义,像下面这样直接使用是没有意义的:
NSOperation*op=[[NSOperationalloc]init];
注意:我们不能直接使用NSOperation这个类,这个类相当于一个抽象类,不能直接实例化NSOperation来使用,可以直接使用系统提供的NSInvocationOperation和NSBlockOperation,也可以自定义opration。
NSOperation基类API
下面简单说明NSOperation所提供的一些操作。
1.执行任务
NSOperation提供了start方法开启任务执行操作,NSOperation对象默认按同步方式执行,也就是在调用start方法的那个线程中直接执行。
if(!operation.isExecuting){
[operationstart];
}
但是,当我们使用NSOperationQueue时,将operation添加到queue中,任务会自动开启,任务会在异步线程去执行任务。
网友评论