NSOperation
1.和NSThread,GCD一样,NSOperation也是苹果提供的一套多线程并发编程方案;
2.它是对GCD在OC层面的一个封装,是完全面向对象的;
3.它比GCD多了一些更加实用的功能;
4.经常使用;
5.自动管理;
NSOperation用法
NSOperation是一个抽象类,在使用的时候,需要使用的是它的子类,并且有3种方式:
1.NSInvocationOperation类;
2.NSBlockOperation类;
3.继承于NSOperation的子类,重写main方法;
要实现多线程,需要配合NSOperationQueue类进行配合;
NSOperationQueue表示队列,分为主队列和其他队列:
主队列是一个特殊的串行队列;
其他队列包含了串行队列和并发队列;
NSOperationQueue
获取主队列:
1 | NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; |
其他队列:
1 | NSOperationQueue *q1 = [[NSOperationQueue alloc]init]; |
maxConcurrentOperationCount属性:
线程的最大个数,该属性不进行设置时,默认为-1即为并发队列,不限制线程开启个数,开启新线程;
当值为1时,表示为串行队列,虽然开启了线程,但是是一个一个执行;
不要无脑的认为设置该值越大,开启的线程数量就越多,线程开启最大数系统会自行调整;
其他方法:
1 | //队列添加任务,并自动开启 |
NSInvocationOperation使用
1 | //队列,默认并发 |
开启的了新的线程;
NSBlockOperation使用
1 | NSBlockOperation *block1 = [NSBlockOperation blockOperationWithBlock:^{ |
自定义NSOperation子类
1 | .h |
NSOperationQueue的方法
1 | NSOperationQueue *q2 = [[NSOperationQueue alloc]init]; |
不同操作队列任务之间可以设置依赖
设置依赖的意思就是可以设置某个任务的开始执行依赖于另外一个任务的完成
1 | //blcok1 任务会在invocationOperation1所有任务完成之后才开始执行 |
NSOperation其他的一些设置
1 | //设置任务的优先级,默认NSOperationQueuePriorityNormal,优先级高只表明优先被执行,而不代表被完成,在 |