iOS中的多线程 NSOperation
生活随笔
收集整理的這篇文章主要介紹了
iOS中的多线程 NSOperation
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在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"];//創建一個operationNSInvocationOperation *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; }@endNSBlockOperation
代碼
// 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/?
版權聲明:本文版權歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
技術咨詢:
轉載于:https://www.cnblogs.com/jerehedu/p/5141074.html
總結
以上是生活随笔為你收集整理的iOS中的多线程 NSOperation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Domino.exe是什么
- 下一篇: Word2003怎么编辑复杂的数学运算公