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;  

    }

     

     

     

     

  • 相关阅读:
    strpbrk函数
    memchr函数
    memset函数
    strrev函数
    strncmp函数
    strset函数
    strtok函数
    计算机经典书籍之程序设计语言
    spring自定义bean的作用域
    lucene文章
  • 原文地址:https://www.cnblogs.com/leevaboo/p/5065121.html
Copyright © 2011-2022 走看看