Objective-C的NSOperation多线程类基本使用指南

2020-01-14 19:04:47王旭

        }  
    }  
}  

 

NSOperationQueue
一、简介
一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的。也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步执行的。
创建一个操作队列:

复制代码
NSOperationQueue *queue = [[NSOperationQueue alloc] init];  
二、添加NSOperation到NSOperationQueue中
1.添加一个operation
复制代码
[queue addOperation:operation];  
2.添加一组operation
复制代码
[queue addOperations:operations waitUntilFinished:NO];  
3.添加一个block形式的operation
复制代码
[queue addOperationWithBlock:^() {  
    NSLog(@"执行一个新的操作,线程:%@", [NSThread currentThread]);  
}];  
NSOperation添加到queue之后,通常短时间内就会得到运行。但是如果存在依赖,或者整个queue被暂停等原因,也可能需要等待。
注意:NSOperation添加到queue之后,绝对不要再修改NSOperation对象的状态。因为NSOperation对象可能会在任何时候运行,因此改变NSOperation对象的依赖或数据会产生不利的影响。你只能查看NSOperation对象的状态, 比如是否正在运行、等待运行、已经完成等

 

三、添加NSOperation的依赖对象
1.当某个NSOperation对象依赖于其它NSOperation对象的完成时,就可以通过addDependency方法添加一个或者多个依赖的对象,只有所有依赖的对象都已经完成操作,当前NSOperation对象才会开始执行操作。另外,通过removeDependency方法来删除依赖对象。