iOS中的多線程 NSOperation

來源:互聯網
上載者:User

標籤:

  在ios中,使用多線程有三種方式,分別是:NSThread、NSOperation和NSOperationQueue、GCD,在本節,主要講解一下NSOperation的使用。

  NSOperation和NSOperationQueue這種方式實際上是將NSOperation的對象放到一個NSOperationQueue隊列中,然後依次啟動操作,類似於線程池的使用。

  在使用的過程中,NSOperation的操作使用的是它的子類,分別是NSInvocationOperation和NSBlockOperation,兩者沒有本質的區別,只不過後者以Block的方式來實現,使用相對簡單。NSOperationQueue主要負責管理和執行所有的NSOperation對象,並控制線程之間的執行順序與依賴關係。

  下面,通過NSOperation開始多線程從網路擷取圖片並重新整理。

NSInvocationOperation

代碼

//  ViewController.m//  AAAAAA////  Created by jerei on 15-11-8.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];}#pragma mark - 點擊按鈕開啟線程下載圖片- (IBAction)click_InvocationOpreation_load:(UIButton *)sender {        NSURL *url = [NSURL URLWithString:@"http://www.jerehedu.com/images/temp/logo.gif"];        //建立一個operation    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadImageWithUrl:) object:url];    //添加到操作隊列中    NSOperationQueue *queue = [[NSOperationQueue alloc] init];    [queue addOperation:operation];}#pragma mark - 根據url擷取圖片-(void)loadImageWithUrl:(NSURL *)url{    NSData *data = [NSData dataWithContentsOfURL:url];    UIImage *image = [UIImage imageWithData:data];        //回到主線程更新介面    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(updateImageView:) object:image];        [[NSOperationQueue mainQueue] addOperation:operation];}#pragma mark - 更新介面-(void)updateImageView:(UIImage *)img{    _imageView.image = img;}@end

NSBlockOperation

代碼

//  ViewController.m//  AAAAAA////  Created by jerei on 15-11-8.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];}#pragma mark - 點擊按鈕開啟線程下載圖片- (IBAction)click_BlockOpreation_load:(UIButton *)sender {        //建立操作隊列    NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];    //設定最大並發線程數    operationQueue.maxConcurrentOperationCount = 5;        //<方法一> 建立operation//    NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{//        //根據url請求資料//        NSURL *url = [NSURL URLWithString:@"http://www.jerehedu.com/images/temp/logo.gif"];//        [self loadImageWithUrl:url];//    }];//    //    //添加到隊列中//    [operationQueue addOperation:operation];        //<方法二> 建立operation    [operationQueue addOperationWithBlock:^{        //根據url請求資料        NSURL *url = [NSURL URLWithString:@"http://www.jerehedu.com/images/temp/logo.gif"];        [self loadImageWithUrl:url];    }];}#pragma mark - 根據url擷取圖片-(void)loadImageWithUrl:(NSURL *)url{    NSData *data = [NSData dataWithContentsOfURL:url];    UIImage *image = [UIImage imageWithData:data];        //回到主線程更新介面    [[NSOperationQueue mainQueue] addOperationWithBlock:^{        [self updateImageView:image];    }];}#pragma mark - 更新介面-(void)updateImageView:(UIImage *)img{    _imageView.image = img;}@end

 

傑瑞教育
出處:http://www.cnblogs.com/jerehedu/ 
著作權聲明:本文著作權歸煙台傑瑞教育科技有限公司和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。
技術諮詢: 

iOS中的多線程 NSOperation

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.