"最大并发数"
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) NSOperationQueue *queue;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.queue = [[NSOperationQueue alloc] init];
self.queue.maxConcurrentOperationCount = 2.0;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self OPDemo];
}
- (void)OPDemo
{
for (NSInteger i = 0; i < 10; i++) {
[self.queue addOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"%zd %@",i,[NSThread currentThread]);
}];
}
}
"队列的暂停/继续/取消全部"
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) NSOperationQueue *queue;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.queue = [[NSOperationQueue alloc] init];
self.queue.maxConcurrentOperationCount = 2.0;
}
#pragma mark - 暂停队列调度任务
- (IBAction)Stop:(id)sender
{
self.queue.suspended = YES;
NSLog(@"暂停 %tu",self.queue.operationCount);
}
#pragma mark - 使队列继续调度任务执行
- (IBAction)GoOn:(id)sender
{
self.queue.suspended = NO;
NSLog(@"继续 %tu",self.queue.operationCount);
}
#pragma mark - 取消队列里面的全部
- (IBAction)cancleAll:(id)sender
{
[self.queue cancelAllOperations];
NSLog(@"取消全部 %tu",self.queue.operationCount);
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self OPDemo];
}
- (void)OPDemo
{
for (NSInteger i = 0; i < 20; i++) {
[self.queue addOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"%zd %@",i,[NSThread currentThread]);
}];
}
}
"操作间的依赖"
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController {
NSOperationQueue *_queue;
}
- (void)viewDidLoad {
[super viewDidLoad];
_queue = [[NSOperationQueue alloc] init];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self OPDemo];
}
- (void)OPDemo
{
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"登录 %@",[NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"付费 %@",[NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"下载 %@",[NSThread currentThread]);
}];
NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"通知用户 %@",[NSThread currentThread]);
}];
[op2 addDependency:op1];
[op3 addDependency:op2];
[op4 addDependency:op3];
[_queue addOperations:@[op1,op2,op3] waitUntilFinished:NO];
[[NSOperationQueue mainQueue] addOperation:op4];
NSLog(@"后面的代码");
}
"监听操作是否执行完毕/设置操作的服务质量"
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController {
NSOperationQueue *_queue;
}
- (void)viewDidLoad {
[super viewDidLoad];
_queue = [[NSOperationQueue alloc] init];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self OPDemo];
}
- (void)OPDemo
{
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
for (NSInteger i = 0; i < 10; i++) {
NSLog(@"op1 %zd %@",i,[NSThread currentThread]);
}
}];
op1.qualityOfService = NSQualityOfServiceUserInteractive;
[op1 setCompletionBlock:^{
NSLog(@"op1确定执行完了吗? %@",[NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
for (NSInteger i = 0; i < 10; i++) {
NSLog(@"op2 %zd %@",i,[NSThread currentThread]);
}
}];
op2.qualityOfService = NSQualityOfServiceBackground;
[_queue addOperations:@[op1,op2] waitUntilFinished:NO];
}