Objective-C的的NSOperation多线程类基本使用指南多线程类基本使用指南
NSOperation
一、一、NSOperation
1.简介
NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作。
NSOperation本身是抽象基类,因此必须使用它的子类,使用NSOperation子类的方式有2种:
1> Foundation框架提供了两个具体子类直接供我们使用:NSInvocationOperation和NSBlockOperation
2> 自定义子类继承NSOperation,实现内部相应的方法
2.执行操作
NSOperation调用start方法即可开始执行操作,NSOperation对象默认按同步方式执行,也就是在调用start方法的那个线程中直
接执行。NSOperation对象的isConcurrent方法会告诉我们这个操作相对于调用start方法的线程,是同步还是异步执行。
isConcurrent方法默认返回NO,表示操作与调用线程同步执行
3.取消操作
operation开始执行之后, 默认会一直执行操作直到完成,我们也可以调用cancel方法中途取消操作
代码如下:
[operation cancel];
4.监听操作的执行
如果我们想在一个NSOperation执行完毕后做一些事情,就调用NSOperation的setCompletionBlock方法来设置想做的事情
代码如下:
operation.completionBlock = ^() {
NSLog(@”执行完毕”);
};
或者
代码如下:
[operation setCompletionBlock:^() {
NSLog(@”执行完毕”);
}];
二、二、NSInvocationOperation
1.简介
基于一个对象和selector来创建操作。如果你已经有现有的方法来执行需要的任务,就可以使用这个类
2.创建并执行操作
代码如下:
// 这个操作是:调用self的run方法
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];
// 开始执行任务(同步执行)
[operation start];
三、三、NSBlockOperation
1.简介
能够并发地执行一个或多个block对象,所有相关的block都执行完之后,操作才算完成
2.创建并执行操作
代码如下:
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^(){
NSLog(@”执行了一个新的操作,线程:%@”, [NSThread currentThread]);
}];
// 开始执行任务(这里还是同步执行)
[operation start];
3.通过addExecutionBlock方法添加block操作
代码如下:
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^(){
NSLog(@”执行第1次操作,线程:%@”, [NSThread currentThread]);
}];
[operation addExecutionBlock:^() {
NSLog(@”又执行了1个新的操作,线程:%@”, [NSThread currentThread]);
}];
[operation addExecutionBlock:^() {
NSLog(@”又执行了1个新的操作,线程:%@”, [NSThread currentThread]);
}];
[operation addExecutionBlock:^() {
NSLog(@”又执行了1个新的操作,线程:%@”, [NSThread currentThread]);