iOS多线程-NSOperation

2017-08-26  本文已影响29人  天外丶飞仙

NSOperation其实就是苹果对GCD的封装,把GCD封装成面向对象的编程,让开发者使用起来更加方便,简洁。

NSOperation的核心

线程间的通讯(开发中常用写法)

[self.opQueue addOperationWithBlock:^{
     NSLog(@"耗时操作  %@",[NSThread currentThread]);
     //主线程更新 UI
     [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            NSLog(@ %@",[NSThread currentThread]);
      }];     
 }];

最大并发数

//这个属性便能控制线程的最大并发数
self.opQueue.maxConcurrentOperationCount = 2;

队列的暂停和继续

取消所有操作

依赖关系

例子:

//1.下载
NSBlockOperation * op1 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"下载---%@",[NSThread currentThread]);
        [NSThread sleepForTimeInterval:.5];
}];
//2.解压
NSBlockOperation * op2 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"解压---%@",[NSThread currentThread]);
        [NSThread sleepForTimeInterval:1.0];
}];
//3.通知用户
NSBlockOperation * op3 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"通知用户---%@",[NSThread currentThread]);
 }];  
//NSOperation 提供了依赖关系
//注意,不要指定循环依赖,队列就不工作了!!
 [op2 addDependency:op1];
 [op3 addDependency:op2];
//添加到队列中 waitUntilFinished:是否等待! //会卡住当前线程!
[self.opQueue addOperations:@[op1,op2,op3] waitUntilFinished:NO];

添加好依赖条件操作就会等待依赖的操作执行完再执行。

上一篇下一篇

猜你喜欢

热点阅读