您的位置:首页 > 产品设计 > UI/UE

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

2017-09-05 22:55 621 查看
多线程15NSOperationQueue和自定义NSOperation合用实现多线程
一自定义NSOperation

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

2 代码示例

3 运行结果

三自定义NSOperation和NSThread的时候main方法说明
1 自定义 NSOperation 验证
11 QWMOperationm

12 代码示例

13 运行结果

2 自定义 QWMThread 验证
21 QWMThread

22 示例代码

23 运行结果

多线程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)}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: