操作和操作队列 NSOperation和NSOperationQueue

操作和操作队列

NSOperation和NSOperationQueue


1、简单介绍

NSThread 多任务处理时 手动操作很不方便

作用:NSOperation和NSOperationQueue配合使用实现多线程编程 Threading Programming


NSOperation

它是一个抽象类,它本身不具有处理操作的能力。它的使用方法是必须使用NSOperation的子类。使用NSOperation的最简单的方式就是把一个NSOperation对象加入到NSOperationQueue队列中,一旦这个对象被加入到队列,队列就开始处理这个对象的任务,直到这个对象的所有操作完成,然后它被队列释放。

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

NSOperation有3种:

1)NSInvocationOperation 字面意思来看就是调用操作 

注:操作对象默认在主线程中执行,只有添加到队列中才会开启新的线程。

2)NSBlockOperation,NSInvocationOperation一样同属NSOperation的具体子类,但不同的是以block的形式对程序进行封装,block本身没有提供显示的传入参数和返回结果。

注:NSBlockOperation封装的操作数大于1,就会异步执行操作

3)自定义子类继承NSOperation,实现相应的方法main方法 来处理任务(实现主要任务的方法)


operation的开始和取消


NSOperationQueue的使用

设置队列的最大并发数 即队列中最多同时运行几个任务

queue的暂停和继续

取消当前queue中的所有操作

queue中的operation的执行顺序

queue中的operation的优先级


决定Queue中的operation的执行顺序的因素:

1、依赖关系

2、优先级(只针对于已经准备好的operation)


ASIHTTPRequest继承于NSOperation



4个术语比较容易混淆:同步、异步、并发、串行


1同步和异步决定了要不要开启新的线程


同步:在当前线程中执行任务,不具备开启新线程的能力


异步:在新的线程中执行任务,具备开启新线程的能力



2并发和串行决定了任务的执行方式


并发:多个任务并发(同时)执行


串行:一个任务执行完毕后,再执行下一个任务




NSThread在处理多线程时 需要手动操作,不方便;

NSOperation NSOperationQueue配合使用,完成多线程操作,操作简单,效率比较高

    

NSOperation 看起来是处理操作的一个类,定义并提供了子类所需的关键方法和基础架构。 但是本身是一个抽象类 不具备处理操作的能力。需要继承并实现NSOperation类的子类,来处理自己的程序工作单元。为了减少应用程序的类的数量和复杂性,Foundation框架提供了两个NSOperation的具体子类以供使用:

    

前两种 子类方法

1,NSInvocationOperation 他是负责调用操作的一个类

    

2NSBlockOperation。与NSInvocationOperation一样同属NSOperation的具体子类,但不同的是以block的形式对程序进行封装,block本身没有提供显示的传入参数和返回结果。


   NSBlockOperation中添加任务,当他操作的任务数量大于1的时候,会在不同的分线程中 并发 执行(也就是在不同的分线程中执行)

    

   在创建blockOperation后可以调用addExecutionBlock:方法添加更多的block

    

3,另外一种NSOperation的方式

    自定义子类继承NSOperation,实现相应的方法main方法 来处理任务(实现主要任务的方法)

     对于自定义子类的方式,可以分为 并发 非并发两种形式,定义非并发的NSOperation要简单许多,只需要重载-(void)main这个方法,在这个方法里面执行主任务,并正确地响应取消事件;定义并发的NSOperation则复杂很多,需要重写NSOperation的几个方法。



4NSOperationQueue.

    

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

    

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

    

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



    让队列中的操作按顺序输出

    

    决定队列中的操作的操作顺序的决定因素有两个:

    主要因素:操作之间的依赖关系。也就是让两个操作相互依赖。[A addDependency:B] 先执行B

    次要因素:操作的优先级,(只针对已经准备好的操作)

    

    但是,要注意的是 如果只是设置两个操作之间的依赖关系和优先级,则只会控制两个操作之间的操作顺序,跟其他的操作无关,两个操作也不一定挨着一先一后输出


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值