swift(NSOperation 多线程)

来源:互联网 发布:图像增强软件 编辑:程序博客网 时间:2024/06/11 18:33

转自:http://blog.csdn.net/woshidongge123/article/details/48060079?locationNum=1



 相比于gcd,它更好地控制和处理大量的并发操作

NSOperation 封装了需要的代码,NSOperation是抽象基类,一般我们使用系统提供的子类或者自定义子类来继承它

NSOperationQueue是操作队列,专门用来调度和管理NSOperation

1、创建一个系统提供的nsoperation

let myoperation = NSBlockOperation { () ->Voidin

            //操作

        }

2、创建一个nsoperationqueue,并添加nsoperation,这样nsoperation对象就会执行

 NSOperationQueue().addOperation(myoperation)

3、不使用nsoperationqueue执行,,也可这样执行,不过这个操作时同步的,一般不推荐这种方法,一般用与nsoperationqueue相结合使用的方法

myoperation.start()

myoperation.cancel()//取消操作

4、nsoperation回调

   myoperation.completionBlock = { 

        }

5、在原有的nsoperation再添加操作,nsoperation里面的操作时并行的

  myoperation.addExecutionBlock { () ->Voidin

            //第二个操作

        }

6、自定义nsoperation,即实现main()方法

import UIKit

protocol opCompletionDelegate{//代理

    func opCompletion()

}

class wkoperation: NSOperation {

    var delegate:opCompletionDelegate?//运用代理通知类中的主线程更新ui

    overridefunc main() {

        super.main()

        //操作

        iflet mydelegate =self.delegate{

            mydelegate.opCompletion()

        }

    }

}

调用的类:

 let myoperation1 =wkoperation()

 myoperation1.delegate =self


        NSOperationQueue().addOperation(myoperation1)

    }

    func opCompletion() {

        

    }


7、依赖关系

  myoperation.addDependency(myoperation1)//myoperation依赖于myoperation1myoperation1执行完再执行myoperation

  myoperation.removeDependency(myoperation1)  //移除依赖

8、设置优先级,并不一定能保证系统按照优先级的顺序执行,只是让系统分配资源的时候更倾向于优先级高的

        myoperation.queuePriority = NSOperationQueuePriority.VeryLow

9、设置队列并行的最大操作数,等于1相当于串行

        let myoperationqueue = NSOperationQueue()

        myoperationqueue.maxConcurrentOperationCount = 2

 10、一直等到操作执行完

        myoperation.waitUntilFinished()



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 发奖品把钱骗走了应该怎么办? 淘宝东西没到自动确认了收货怎么办 淘宝买的东西收不到货怎么办 资料如实填了 怎么办不下来借款啊 如果淘宝店家跑了没收到货怎么办 淘宝店家退完款把货又发了怎么办 淘宝收到货有问题客服不回复怎么办 手机从美国寄回中国被海关扣怎么办 摩托车新买的后悔了想卖怎么办? 淘宝单号输错了怎么办运费险 在淘宝卖东西快递单号输错了怎么办 淘宝买东西签收后发现坏了怎么办 摩托车购车发票写了别人名字怎么办 新领的发票跟电脑对不上号怎么办 淘宝未发货退款卖家拒绝怎么办 在超市买东西把票丢了不让出怎么办 在淘宝上买东西付款不发货怎么办 买家拍下商品卖家拒绝发货怎么办 没有中文标签被投诉到工商局怎么办 淘宝申请退款卖家强制发货怎么办 1688卖家交易不小心关闭怎么办 拼多多两天不发货怎么办自动退款吗 在家里放的东西找不到了怎么办 在家里烧东西烟太大了怎么办 转转上买的二手东西有问题怎么办? 大巴车过虎门大桥错走小车道怎么办 pe高压膜中间松两边紧怎么办? 穿着浅口的高跟鞋走路老是掉怎么办 五吧同城模特兼职被骗了怎么办 华为手机充电玩黑屏怎么办教学视频 衣服肩膀被衣架撑变形了怎么办 货已经安到客户家客户不付款怎么办 微商卖家不给退货不给换货怎么办啊 淘宝卖家已签收退货却不退款怎么办 申请换货卖家收到货不给换怎么办 我买了个机器想退货怎么办 卖家要求退回去又拒收怎么办 拼多多48小时还不发货怎么办 退货退款单号填错了退不了款怎么办 淘宝退货退款快递单号填写错怎么办 蘑菇街退货忘记填快递单号了怎么办