多线程-NSOperation

  • NSOperation简介:

是OC语言中基于GCD的面向对象的封装
GCD 是iOS 4.0推出的, NSOperation是iOS 2.0推出的,在iOS 4.0后对NSOperation进行了重写
使用起来比GCD更加简单(面向对象)
提供了一些用GCD不好实现的功能
苹果推荐使用,使用NSOperation不用关心线程以及线程的生命周期

NSOperation是一个抽象类
不能直接使用(方法没有实现); 约束子类都具有共同的属性和方法
NSOperation的子类:
NSInvocationOperation 、 NSBlockOperation 以及自定义的Operation

NSOperationQueue队列
在GCD中有串行队列和并发队列两大类;
NSOperation中只有一种队列:并发队列,也就是实例化的NSOperationQueue直接就是并发队列

  • 使用步骤:

在GCD中,一个任务就是一个block,也就是一个代码块;
而在NSOperation中,把需要执行的任务封装成一个NSOperation对象,将封装的NSOperation对象放入队列中(异步执行)

1.把需要执行的操作封装成一个NSOperation对象
2.将封装的对象添加到队列当中
系统会自动将NSOperationQueue中的NSOperation取出,将取出的NSOperation封装的操作放到一条新线程中执行

与GCD相比较, 不存在串行队列、并发队列与同步、异步执行的搭配,不需要考虑串行同步死锁, 也正是因为并发队列与异步执行的搭配被更广泛的使用,所以在NSOperation中只存在并发队列异步执行的使用场景,苹果也推荐我们使用NSOperation
如果不希望开辟新线程,可以直接调用start方法,而不将操作添加到队列中(NSBlockOperation中如果操作数大于1,也就是添加了额外操作后,大于1的操作将会在新线程执行)

你可能感兴趣的