iOS 开发多线程 —— NSOperation

本文是根据文顶顶老师的博客学习而来,转载地址:http://www.cnblogs.com/wendingding/p/3809042.html

一、NSOperation简介

1.简单说明

NSOperation的作?:配合使用NSOperation和NSOperationQueue也能实现多线程编程

NSOperation和NSOperationQueue实现多线程的具体步骤:

(1)先将需要执行的操作封装到一个NSOperation对象中

(2)然后将NSOperation对象添加到NSOperationQueue中

(3)系统会?动将NSOperationQueue中的NSOperation取出来

(4)将取出的NSOperation封装的操作放到?条新线程中执?

2.NSOperation的子类

NSOperation是个抽象类,并不具备封装操作的能力,必须使?它的子类

使用NSOperation?类的方式有3种:

(1)NSInvocationOperation

(2)NSBlockOperation

(3)自定义子类继承NSOperation,实现内部相应的?法

NSInvocationOperation:

示例代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(thread1) object:nil];
    [operation start];
    NSInvocationOperation *operation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(thread2) object:nil];
    [operation2 start];

}

-(void)thread1{
    NSLog(@"currentThread = %@",[NSThread currentThread]);
}

-(void)thread2{
   NSLog(@"currentThread2 = %@",[NSThread currentThread]);
}
 currentThread = <NSThread: 0x17406d780>{number = 1, name = main}

currentThread2 = <NSThread: 0x17406d780>{number = 1, name = main}

可以看见,并没有开启新的线程.

注意:操作对象默认在主线程中执行,只有添加到队列中才会开启新的线程。即默认情况下,如果操作没有放到队列中queue中,都是同步执行。只有将NSOperation放到一个NSOperationQueue中,才会异步执行操作

NSBlockOperation:

 NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"operation = %@",[NSThread currentThread]);
    }];
    [operation3 start];

看打印结果:
operation = <NSThread: 0x1700728c0>{number = 1, name = main}

注意:只要NSBlockOperation封装的操作数 > 1,就会异步执行操作

例如:

NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"operation = %@",[NSThread currentThread]);
    }];
    [operation3 addExecutionBlock:^{
        NSLog(@"operation2 = %@",[NSThread currentThread]);
    }];
    [operation3 start];

然后看打印结果:

operation = <NSThread: 0x1700706c0>{number = 1, name = main}
operation2 = <NSThread: 0x170075a40>{number = 4, name = (null)}

NSOperationQueue:

NSOperationQueue的作?:NSOperation可以调?start?法来执?任务,但默认是同步执行的

如果将NSOperation添加到NSOperationQueue(操作队列)中,系统会自动异步执行NSOperation中的操作

添加操作到NSOperationQueue中,自动执行操作,自动开启线程

示例:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(thread1) object:nil];

    NSInvocationOperation *operation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(thread2) object:nil];

    NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"currentThread3 = %@",[NSThread currentThread]);
    }];

    [operation3 addExecutionBlock:^{
        NSLog(@"currentThread3_1 = %@",[NSThread currentThread]);
    }];

    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    //把操作添加到队列中
    //第一种方式
    [queue addOperation:operation1];
    [queue addOperation:operation2];
    [queue addOperation:operation3];
    //第二种方式
    [queue addOperationWithBlock:^{
        NSLog(@"currentThread4 = %@",[NSThread currentThread]);
    }];

}

-(void)thread1{
    NSLog(@"currentThread1 = %@",[NSThread currentThread]);
}

-(void)thread2{
   NSLog(@"currentThread2 = %@",[NSThread currentThread]);
}

查看结果:

currentThread1 = <NSThread: 0x17006f440>{number = 4, name = (null)}
currentThread2 = <NSThread: 0x17007d9c0>{number = 5, name = (null)}
currentThread3_1 = <NSThread: 0x17007d9c0>{number = 5, name = (null)}
currentThread3 = <NSThread: 0x17006f440>{number = 4, name = (null)}
currentThread4 = <NSThread: 0x17007d9c0>{number = 5, name = (null)}
时间: 2024-10-13 15:15:04

iOS 开发多线程 —— NSOperation的相关文章

iOS开发-多线程NSOperation和NSOperationQueue

上一篇文章稍微提及了一下NSThread的使用,NSThread能直观地控制线程对象,不过需要自己管理线程的生命周期,线程同步,用起来比较繁琐,而且比较容易出错.不过Apple给出了自己的解决方案NSOperation,它本身是抽象基类,因此必须使用它的子类,使用NSOperation子类的方式有NSInvocationOperation和NSBlockOperation两种方式,先补充一下NSThread的用法: NSThread获取当前线程: [NSThread currentThread]

iOS开发多线程之自定义NSOperation

iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. 1 // 2 // YYViewController.h 3 // 01-自定义Operation 4 // 5 // Created by apple on 14-6-26. 6 // Copyright (c) 2014年 itcase. All rig

iOS开发多线程篇—自定义NSOperation

iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. 1 // 2 // YYViewController.h 3 // 01-自定义Operation 4 // 5 // Created by apple on 14-6-26. 6 // Copyright (c) 2014年 itcase. All rig

iOS开发多线程篇 09 —NSOperation简单介绍

iOS开发多线程篇—NSOperation简单介绍 一.NSOperation简介 1.简单说明 NSOperation的作?:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操作封装到一个NSOperation对象中 (2)然后将NSOperation对象添加到NSOperationQueue中 (3)系统会?动将NSOperationQueue中的NSOpe

iOS开发多线程篇 10 —NSOperation基本操作

iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执?行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. (3)最?大并发数的相关?方法 - (NSInteger)maxConcurrentOperationCount;- (void)setMaxConcurrentOperationCount:(NSInteger)cnt; 说明:如果没有设置最大并发数,那么并发的个数是由系统内存和CPU决定的,可能

iOS开发多线程篇—NSOperation基本操作

iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执?行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. (3)最?大并发数的相关?方法 - (NSInteger)maxConcurrentOperationCount;- (void)setMaxConcurrentOperationCount:(NSInteger)cnt; 说明:如果没有设置最大并发数,那么并发的个数是由系统内存和CPU决定的,可能

iOS开发多线程基础知识 NSOperation

-------NSOperation简介---- 1.NSOperation的作用 ·配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQueue实现多线程的具体步骤 ·先将需要执行的操作封装到一个NSOperation对象中 ·然后将NSOperation对象添加到NSOperationQueue中 ·系统会自动将NSOperation中封装的操作放到一条新线程中执行 ---------NSOperation的

iOS开发多线程篇—NSOperation简单介绍

iOS开发多线程篇—NSOperation简单介绍 一.NSOperation简介 1.简单说明 NSOperation的作?:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操作封装到一个NSOperation对象中 (2)然后将NSOperation对象添加到NSOperationQueue中 (3)系统会?动将NSOperationQueue中的NSOpe

iOS开发多线程篇 11 —自定义NSOperation

iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. 1 // 2 // YYViewController.h 3 // 01-自定义Operation 4 // 5 // Created by apple on 14-6-26. 6 // Copyright (c) 2014年 itcase. All rig