iOS学习笔记-116.多线程15——NSOperationQueue和自定义NSOperation合用实现多线程

时间:2022-04-23 21:11:06

多线程15——NSOperationQueue和自定义NSOperation合用实现多线程

一、自定义NSOperation

自定义NSOperation我们需要继承自 NSOperation 重写

- (void)main;

方法


二、NSOperationQueue和自定义NSOperation合用实现多线程

2.1 自定义NSOperation ( QWMOperation )

//
// QWMOperation.m
// 03_UIview85多线程_NSOperation
//
// Created by 杞文明 on 17/9/4.
// Copyright © 2017年 杞文明. All rights reserved.
//

#import "QWMOperation.h"

@implementation QWMOperation

//告知要执行的任务是什么 , 自定义重新main方法,任务封装到main中
//1.有利于代码隐蔽
//2.复用性
-(void)main{
[super main];
NSLog(@"----QWMOperation---main---%@",[NSThread currentThread]);
}

@end

2.2 代码示例

/*自定义操作 和 NSOperationQueue合用,实现多线程。自定义操作需要把任务封装到 main 方法中*/
-(void)customOperationWithQueue{
//1.创建操作
QWMOperation *op1 = [[QWMOperation alloc]init];
QWMOperation *op2 = [[QWMOperation alloc]init];
QWMOperation *op3 = [[QWMOperation alloc]init];

//2.创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];

//3.添加任务到队列中
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
}

2.3 运行结果

[15936:79761] ----QWMOperation---main---<NSThread: 0x60800007c500>{number = 4, name = (null)}
[15936:79766] ----QWMOperation---main---<NSThread: 0x60000007c380>{number = 5, name = (null)}
[15936:79765] ----QWMOperation---main---<NSThread: 0x60800007a340>{number = 3, name = (null)}

三、自定义NSOperation和NSThread的时候main方法说明

我们自定义NSOperation和NSThread的时候,任务的执行都是调用 start 来执行的,但是我们的任务都写在 main 中。我们猜想 我们的start方法应该是调用了 main 方法。

3.1 自定义 NSOperation 验证

3.1.1 QWMOperation.m

//
// QWMOperation.m
// 03_UIview85多线程_NSOperation
//
// Created by 杞文明 on 17/9/4.
// Copyright © 2017年 杞文明. All rights reserved.
//

#import "QWMOperation.h"

@implementation QWMOperation

//告知要执行的任务是什么 , 自定义重新main方法,任务封装到main中
//1.有利于代码隐蔽
//2.复用性
-(void)main{
[super main];
NSLog(@"----QWMOperation---main---%@",[NSThread currentThread]);
}

- (void)start{
NSLog(@"---start--start");
[super start];
NSLog(@"---start--end");
}
@end

3.1.2 代码示例

/*自定义操作 和 NSOperationQueue合用,实现多线程。自定义操作需要把任务封装到 main 方法中*/
-(void)customOperationWithQueue{
//1.创建操作
QWMOperation *op1 = [[QWMOperation alloc]init];

//2.创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];

//3.添加任务到队列中
[queue addOperation:op1];
}

3.1.3 运行结果

[17276:85179] ---start--start
[17276:85179] ----QWMOperation---main---<NSThread: 0x608000076c80>{number = 3, name = (null)}
[17276:85179] ---start--end

3.2 自定义 QWMThread 验证

3.2.1 QWMThread

//
// QWMThread.m
// 03_UIview85多线程_NSOperation
//
// Created by 杞文明 on 17/9/5.
// Copyright © 2017年 杞文明. All rights reserved.
//

#import "QWMThread.h"

@implementation QWMThread

-(void)main{
[super main];
NSLog(@"----QWMThread---main---%@",[NSThread currentThread]);
}

- (void)start{
NSLog(@"---start--start---%@",[NSThread currentThread]);
[super start];
NSLog(@"---start--end---%@",[NSThread currentThread]);
}
@end

3.2.2 示例代码

-(void)testThread{
QWMThread *thread = [[QWMThread alloc]init];
[thread start];
}

3.2.3 运行结果

[18448:91233] ---start--start---<NSThread: 0x60800007b980>{number = 1, name = main}
[18448:91233] ---start--end---<NSThread: 0x60800007b980>{number = 1, name = main}
[18448:91471] ----QWMThread---main---<QWMThread: 0x600000262a00>{number = 3, name = (null)}