NSOperation了解和使用

一、NSOperation是一种多线程的方式。首先,我们要先明白NSOperation是一个抽象类,不能直接使用它,它是基于GCD的封装,提供了GCD一些不具有的方法如(方法的依赖,方便我们控制执行操作的顺序)我们可以使用它的两个子类NSInvocationOperation和NSBlockOperation或者使用自定义的方法创建一个继承与NSOperation的类。这种抽象类本人理解为是对代码的封装(将它们公用的方法和属性抽取出来),再根据一些不同的功能创建两个子类。

二、子类NSBlockOpertaiton的使用:

这种方法是不会开启新的线程的

如果要让它开启新的线程,我们可以添加大于1的操作数,如下:

会开启新的线程

或者将操作加入到队列也可以开启新的线程:

三、NSInvocationOperation的使用:

不会开启新的线程


会开启新的线程

一般情况下我们使用NSOperation是不会用start这种方法的,因为,它默认开启的是同步的模式,只有将NSOperation和NSOperationQueue结合才能体现这种多线程的最大优势。那么如何使用NSOperationQueue呢?

NSOpertaionQueue的使用:(当我们将操作添加到队列中,它会自动调用start方法)

(1)[NSOperationQueue mainQueue];可以直接使用主队列的方法,注意运行在主队列的操作,其实都是在主线程中

(2)[[NSOperationQueue alloc]init];创建一个队列,这种非主队列的队列,具有串行和并行的特点,放入其中的操作会在子线程中执行。

(3)设置NSOperationQueue的最大并发数,NSOperationQueue可以通过以下方法设置最大并发数,

setMaxConcurrentOperationCount:,值得注意的是:当并发数为1就变成了串行执行任务

(4)NSOperationQueue的暂停恢复和取消:

NSOperation有一个cancel方法可以取消单个操作

取消

NSOperationQueue的cancelAllOperations相当于队列中的每个operation调用了cancel方法,会取消队列里面全部的操作。但是,不能取消正在进行中的任务,队列调用了cancelAllOperations后会等当前正在进行的任务执行完闭后取消后面的操作

挂起和恢复

isSuspended: 判断是否挂起

setSuspended: YES表示挂起,NO表示恢复

和取消功能类似,我们同样不能挂起正在运行中的操作,队列会等当前操作结束后将后面的操作暂停(挂起)。因此, 我们在自定义NSOperation的时候需要注意,最好可以经常通过判断isCancelled方法检测操作是否被取消,以响应外部可能进行的取消操作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容