• 多线程----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;  

    }

     

     

     

     

  • 相关阅读:
    由铭心提供的免费邮箱
    BT面板安装教程
    Onedrive分享型网盘搭建
    cookie与session
    IntelliJ Idea 2017 免费激活方法
    什么情况下出现的redis
    tomcat编码问题
    idea启动项目报Unable to open debugger port (127.0.0.1:11480): java.net.SocketException "socket closed"
    Sentry异常捕获平台
    亚瑟·阿伦博士的36个问题
  • 原文地址:https://www.cnblogs.com/leevaboo/p/5065121.html
Copyright © 2020-2023  润新知