zoukankan      html  css  js  c++  java
  • 多线程2

    //

    //  ViewController.m

    //  UI-NO.25多线程-2

    //

    //  Created by Bruce on 15/8/26.

    //  Copyright (c) 2015年 Bruce. All rights reserved.

    //

    /*

     NSOperation 是一个 基类 (抽象类) 不能直接使用 必须使用他的子类

     他默认是在 当前线程 进行操作   如果单独使用NSOperation 必须手动启动

     常与NSOperationQueue一起使用   在与NSOperationQueue一起使用 会自动开辟线程 进行操作   不用手动启动

     

     

     NSOperation 系统提供了两个子类:NSInvocationOperation ,NSBlockOperation

     自定义的子类

     

     

     

     

     NSOperation类是用来封装与单个任务相关的代码和数据的抽象类,因为它是抽象的,你不能够直接使用这个类,而是继承或使用的系统定义的子类( NSInvocationOperation或NSBlockOperation )之一来执行实际任务

     

     能够以并发或非并发的方式执行这个操作

     NSOperation调用start方法即可开始执行操作

     

     

     1、使用定义好的两个子类:NSInvocationOperation 和 NSBlockOperation

     2、使用自定义的NSOperation的子类

     

     NSBlockOperation 操作数大于1  也会开辟线程去执行操作

     

     单一使用Operation他是同步执行

     

     

     

     

     NSInvocationOperation  是在当前线程去进行一个操作

     NSBlockOperation 也是在当前线程去执行一个操作,在使用addExecutionBlock添加一个操作的时候(操作数>1) 会在其他线程并发执行操作

     

     NSOperationQueue线程队列 把Operation放在队列里面  可以使用线程队列 管理线程 使线程并发执行

     maxConcurrentOperationCount 设置线程的最大并发数  默认是-1 没有限制  这样会同时运行队列中的全部的操作

     并发数  是同时执行任务的数量

     尽量在5以内 否则  也会对主线程 有所影响

     

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

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

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

     

     */

    #import "ViewController.h"

    #import "DownLoadOperation.h"

     

    @interface ViewController ()

    {

        int curTicketNum;

        

    }

    @end

     

    @implementation ViewController

     

     

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        curTicketNum = 100;

    //    会在当前线程执行

        NSInvocationOperation *invocation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doSome:) object:@"111"];

    //    [invocation start];

        

        NSInvocationOperation *invocation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doSome:) object:@"222"];

    //    [invocation1 start];

        

        NSInvocationOperation *invocation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doSome:) object:@"333"];

    //    [invocation2 start];

        

     

        

    //    操作数>1 会并发操作

        NSBlockOperation *block = [NSBlockOperation blockOperationWithBlock:^{

            NSLog(@"block111");

            [self doSome:@"block111"];

        }];

     

        

        [block addExecutionBlock:^{

            NSLog(@"block222");

            [self doSome:@"block222"];

        }];

        

        [block addExecutionBlock:^{

            NSLog(@"block333");

            [self doSome:@"block333"];

        }];

        

        [block addExecutionBlock:^{

            NSLog(@"block444");

            [self doSome:@"block444"];

        }];

        

    //    [block start];

        

        

        DownLoadOperation *myOP = [[DownLoadOperation alloc]initWithLoadImageURLString:@"http://image.tianjimedia.com/uploadImages/2012/273/M6J97CZGYA4Z_NatGeo01_250.jpg"];

        

        

    //    线程队列

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

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

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

        NSOperationQueue *queue = [[NSOperationQueue alloc]init];

        queue.maxConcurrentOperationCount = 1;

        [queue addOperation:invocation];

        [queue addOperation:invocation1];

        [queue addOperation:invocation2];

        [queue addOperation:block];

        [queue addOperation:myOP];

    }

     

    - (void)doSome:(id)sender

    {

        NSLog(@"Invocatio%@",sender);

      

    }

     

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     

    @end

     

  • 相关阅读:
    关于springboot项目使用yml类型的配置文件
    关于个人电脑连不上公司svn服务器,显示拒绝访问的错误
    改变思考问题的方式——SQL排序查询
    FreeMarker入门级
    个人电脑安装svn实录
    tomcat配置虚拟路径,可以解决实际开发中测试时前端访问后台电脑上的图片的问题
    springmvc的运行原理个人见解
    [CF915F] Imbalance Value of a Tree
    [CF768G] The Winds of Winter
    [BZOJ4241] 历史研究
  • 原文地址:https://www.cnblogs.com/wukun16/p/4884141.html
Copyright © 2011-2022 走看看