zoukankan      html  css  js  c++  java
  • 多线程----NSOperation

     NSOperationCocoa中的一个抽象类,用来封装单个任务和代码执行一项操作,由于是抽象类,所以不能直接实例化使用,必须定义子类继承该抽象类来实现,

    使用NSOperation的方式有两种:

      一种是用定义好的两个子类:

            NSInvocationOperation 和 NSBlockOperation,有相关的使用方法。

       NSOperation的子类NSInvocationOperation提供了一套简单的多线程编程方法,是IOS多线程编程中最简单的一种实现方式。

      另一种是继承NSOperation:

        NSOperation也是设计用来扩展的,只需继承重写NSOperation的一个方法main。然后把NSOperation子类的对象放入NSOperationQueue队列中,改队列就会开启并开始处理它。

       操作队列NSOperationQueue,它相当于一个线程队列或者可以叫做线程池,可以顺序执行队列中的操作,也可以设置队列中操作的优先级。

     

        NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadImage:) object:kURL];

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

        [queue addOperation:operation];

    开辟一个线程,只想一个方法,加入到线程队列里

     

     

    -(void)downloadImage:(NSString *)urlStr

    {

           NSURL *url = [NSURL URLWithString:urlStr];

        NSData *data = [[NSData alloc]initWithContentsOfURL:url];

        UIImage * image = [[UIImage alloc]initWithData:data];

        [self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:YES];

        //该方法的作用是在主线程中,执行制定的方法(代码块)。

    //    1.当前线程为主线程的时候,waitUntilDone:YES参数无效

    //    2.该方法,没有返回值

    //    3.该方法主要用来用主线程来修改页面UI的状态。

    }

     

    -(void)updateUI:(UIImage*) image{

        self.imageView.frame = CGRectMake(100, 20, image.size.width, image.size.height);

        self.imageView.image = image;  

    }

     

     

     

     

  • 相关阅读:
    网络编程
    正则表达式
    对空气质量历史数据的爬取
    通过移动设备行为数据预测性别年龄
    电影口碑与海报图像的相关性分析
    微博情感分析
    《python3网络爬虫开发实战》--验证码的识别
    python编程快速上手
    Echarts树图定制详解
    Servlet学习笔记【2】---Http数据包
  • 原文地址:https://www.cnblogs.com/leevaboo/p/5065121.html
Copyright © 2011-2022 走看看