您的位置:首页 > 移动开发 > IOS开发

iOS 多线程编程<八、NSOperation的基本使用>

2016-10-19 16:47 309 查看

一:NSOperation基本介绍

(1)NSOperation是对GCD的封装。
(2)NSOperation是个抽象类,并不具备操作能力,必须使用他的子类。
(3)使用NSOperation的子类的方式有三种。分别是NSInvocationOperation,NSBlockOperation,以及自定义的类继承自NSOperation。具体代码如下:
<span style="font-size:14px;">//
//  ViewController.m
//  NSOperation
//
//  Created by fe on 2016/10/19.
//  Copyright © 2016年 fe. All rights reserved.
//

#import "ViewController.h"
#import "ZYFOperation.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self inheritOperation];
}
//子类继承自NSOperation,在.m文件中main函数中封装任务。不会开辟新线程,任务在主线程中调用。
- (void)inheritOperation
{
ZYFOperation *operation = [[ZYFOperation alloc] init];
[operation start];
}
//blockOperation
- (void)blockOperation
{
//封装操作,block块内的任务在主线程内执行
NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1----%s----%@",__func__,[NSThread currentThread]);
}];
NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"2----%s----%@",__func__,[NSThread currentThread]);
}];
//追加任务,会开辟新的线程,block块内的任务在自线程调用
[operation1 addExecutionBlock:^{
NSLog(@"3----%s----%@",__func__,[NSThread currentThread]);
}];
[operation1 addExecutionBlock:^{
NSLog(@"4----%s----%@",__func__,[NSThread currentThread]);
}];
[operation2 addExecutionBlock:^{
NSLog(@"5----%s----%@",__func__,[NSThread currentThread]);
}];
[operation2 addExecutionBlock:^{
NSLog(@"6----%s----%@",__func__,[NSThread currentThread]);
}];

//启动线程
[operation1 start];
[operation2 start];
}
//invocationOperation 不会开启新线程,任务在主线程执行
- (void)invocationOperation
{
/*
第一个参数:目标对象
第二个参数:选择器,要调用的方法
第三个参数:方法要传递的参数
*/
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadTask) object:nil];
[operation start];

}
- (void)downloadTask
{
NSLog(@"----%s----%@",__func__,[NSThread currentThread]);
}
@end</span><span style="font-size: 18px;">
</span>


<span style="font-size:14px;">//
//  ZYFOperation.m
//  NSOperation
//
//  Created by fe on 2016/10/19.
//  Copyright © 2016年 fe. All rights reserved.
//

#import "ZYFOperation.h"

@implementation ZYFOperation
- (void)main
{
NSLog(@"----%s----%@",__func__,[NSThread currentThread]);
}
@end</span><span style="font-size:18px;">
</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: