zoukankan      html  css  js  c++  java
  • IOS中的多线程【二】— NSOperation和NSOperationQueue

    NSOperationQueue是一套基于Objective-c语言的API。

    GCD与NSOperationQueue的优缺点:

    NSOperationQueue:比较安全,可以控制线程的最大数,线程的最大数可决定手机的电量和流量。

    GCD:没有NSOperationQueue安全,但使用起来更简单,执行速度最快。还提供了一些操控底层的方法。实际开发中还是以GCD为主。

    NSOperationQueue实现多线程流程

    1.定义一个任务队列。

    2.定义一个任务。

    3.把任务添加到队列中。一旦任务被添加到队列中,任务会马上被调度执行。

    任务队列(NSOperationQueue)只有主队列和自定义队列两种

    NSOperationQueue的一个实例对象就是一个自定义队列,主队列通过[NSOperationQueue mainQueue]获取。

    NSOperationQueue实现的自定义队列都是并发的

    任务(NSOperation)

    NSOperation是一个抽象类,定义一个任务对象只能继承并重写它,苹果也提供了两个它的子类NSInvocationOperation、NSBlockOperation,我们一般用这个子类。


    NSOperationQueue实现的自定义队列都是并行,下面是

        //1.定义4个队列
        NSBlockOperation * operation1 = [NSBlockOperation blockOperationWithBlock:^
                                        {
                                            NSLog(@"1.下载图片");
                                        }];
        NSBlockOperation * operation2 = [NSBlockOperation blockOperationWithBlock:^
                                         {
                                             NSLog(@"2.修饰图片");
                                         }];
        NSBlockOperation * operation3 = [NSBlockOperation blockOperationWithBlock:^
                                         {
                                             NSLog(@"3.保存图片");
                                         }];
        NSBlockOperation * operation4 = [NSBlockOperation blockOperationWithBlock:^
                                         {
                                             NSLog(@"4.显示图片");
                                         }];
        //2.设置依赖关系,保证顺序执行。
        [operation2 addDependency:operation1];
        [operation3 addDependency:operation2];
        [operation4 addDependency:operation3];
        //3.将任务添加到队列中去,并开始执行。
        [self.queue addOperation:operation1];
        [self.queue addOperation:operation2];
        [self.queue addOperation:operation3];
        //更新UI操作在主队列中执行,依赖关系是可以跨队列的。
        [[NSOperationQueue mainQueue] addOperation:operation4];
    
  • 相关阅读:
    js的解析顺序 作用域 严格模式
    弹性盒模型----容器属性
    tomcat解压版的配置与使用
    将mysql中一行中的几个字段 转换成一列并从其他数据库中查对应的邮件信息
    电脑快捷键
    icell更改用户管理员
    kettle下载地址
    pycharm激活码
    leetcode-111. 二叉树最小深度 · Tree + 递归
    leetcode-102.层序遍历二叉树(正序)· BTree
  • 原文地址:https://www.cnblogs.com/congliang/p/3695551.html
Copyright © 2011-2022 走看看