NSOperation基本的一些操作

NSOperation和NSOperationQueue实现多线程的具体步骤:
1.先将需要执行的操作封装到一个NSOperation对象中,注意NSOperation是一个抽象类,不能实例化,必须用他的子类NSInvocationOperation或NSBlockOperation
2.然后将NSOperation对象添加到NSOperationQueue中
3.系统会自动将NSOperationQueue中的NSOperation取出来
将取出的NSOperation封装的操作放到一条新线程中执行

注解:可以和gcd对比一下,NSOperation是实例化一个操作,然后将操作添加到队列中。而gcd则是,将一个block的任务添加到队列中,其实,原理是一样的。


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

使用 NSOperation 子类的方式有 3
NSInvocationOperation
NSBlockOperation
自定义子类继承 NSOperation ,实现内部相应的方法


创建NSInvocationOperation对象

- (id)initWithTarget:(id)target selector:(SEL)sel object:(id)arg;


调用start方法开始执行操作

- (void)start;

一旦执行操作,就会调用target的sel方法


注意

默认情况下,调用了start方法后并不会开一条新线程去执行操作,而是在当前线程同步执行操作

只有将NSOperation放到一个NSOperationQueue中,才会异步执行操作


创建NSBlockOperation对象

+(id)blockOperationWithBlock:(void (^)(void))block;


NSOperationQueue 的作用
NSOperation 可以调用start 方法来执行任务,但默认是同步执行的
如果 NSOperation 添加到 NSOperationQueue 操作队列 中, 系统会自动 异步执行 NSOperation 中的操作

添加操作到 NSOperationQueue

- (void)addOperation:(NSOperation*)op;

-( void)addOperationWithBlock:( void (^)( void))block;


#import "ViewController.h"


@interfaceViewController ()

@property (nonatomic,strong) NSOperationQueue *myQueue;

@end


@implementation ViewController

/**

 *NSOperationQueue实例化的队列是并发队列

 *

 *并发队列+异步操作

 */

- (NSOperationQueue *)myQueue

{

    if (_myQueue ==nil)

    {

        _myQueue = [[NSOperationQueuealloc] init];

    }

    return_myQueue;

}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    [selfopDemo4];

}


- (void)opDemo1

{

    //操作

    NSInvocationOperation *op = [[NSInvocationOperationalloc] initWithTarget:selfselector:@selector(downLoad)object:nil];

    

    //将操作添加到队列,操作的downLoad方法会被异步执行

    [self.myQueueaddOperation:op];

}


- (void)downLoad

{

    NSLog(@"downLoad %@", [NSThreadcurrentThread]);

}


- (void)opDemo2

{

    //创建操作--异步的

    NSBlockOperation *op = [NSBlockOperationblockOperationWithBlock:^{

         NSLog(@"NSBlockOperation %@", [NSThreadcurrentThread]);

    }];

    

    //将操作添加到队列(并发队列),操作中block内容将异步执行

    [self.myQueueaddOperation:op];

}


//直接添加block==用到最多

- (void)opDemo3

{

    //并发队列异步任务

    [self.myQueueaddOperationWithBlock:^{

        NSLog(@"addOperationWithBlock %@", [NSThreadcurrentThread]);

    }];

}


/**

 *  线程间的通信

 */

- (void)opDemo4

{

    [self.myQueueaddOperationWithBlock:^{

        NSLog(@"下载图像 %@", [NSThreadcurrentThread]);

        

        //下载完成需要更新UI mainQueue主队列

        [[NSOperationQueuemainQueue] addOperationWithBlock:^{

            NSLog(@"%@", [NSThreadcurrentThread]);

        }];

    }];

}


@end

weixin028基于微信小程序小说阅读器设计+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值