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

}

 

 

 

 

posted @ 2015-12-21 22:40  leevaboo  Views(167)  Comments(0Edit  收藏  举报