1、创建:
方式一:
// 创建操作
NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test) object:nil];
// 创建队列并把操作添加到队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:op];
方式二:
// 创建操作
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
// sth long to do
}];
// 创建队列并添加操作
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:op];
方式三:常见操作(线程通信):
// 自定义队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
// 在自定义队列执行
[queue addOperationWithBlock:^{
NSLog(@"a long operation");
// sth to do in sel-cre queue
// 在主队列执行
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"update UIs");
// sth to do in main queue
}];
}];
2、暂停
queue.suspended = !queue.isSuspended;
这个操作需要谨慎,在queue.operationCount == 0 的时候要操作,会产生不必要的麻烦,需要判断一下。
3、取消
[queue cancelAllOperations];
4、设置最大并发线程数:
queue.maxConcurrentOperationCount = 3;
5、设置依赖关系:
依赖关系可以让几个不同的操作有执行的先后顺序(在不同线程):
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"A");
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"B");
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"C");
}];
[op2 addDependency:op1];
[op3 addDependency:op2];
[queue addOperations:@[op1, op2, op3] waitUntilFinished:NO];
网友评论