日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS学习之多线程(9)--NSOperation简单介绍

發布時間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS学习之多线程(9)--NSOperation简单介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自?http://www.cnblogs.com/wendingding/p/3809042.html


一、NSOperation簡介

1.簡單說明

NSOperation的作:配合使用NSOperation和NSOperationQueue也能實現多線程編程

NSOperation和NSOperationQueue實現多線程的具體步驟:

(1)先將需要執行的操作封裝到一個NSOperation對象中

(2)然后將NSOperation對象添加到NSOperationQueue中

(3)系統會動將NSOperationQueue中的NSOperation取出來

(4)將取出的NSOperation封裝的操作放到條新線程中執

?2.NSOperation的子類

NSOperation是個抽象類,并不具備封裝操作的能力,必須使它的子類

使用NSOperation類的方式有3種:

(1)NSInvocationOperation

(2)NSBlockOperation

(3)自定義子類繼承NSOperation,實現內部相應的法

二、 具體說明

1.NSInvocationOperation子類

創建對象和執行操作:

//創建操作對象,封裝要執行的任務//NSInvocationOperation???封裝操作NSInvocationOperation?*operation=[[NSInvocationOperation?alloc]initWithTarget:self?selector:@selector(test)?object:nil];//執行操作[operation?start];

說明:一旦執操作,就會調用target的test方法

代碼示例:

// //??YYViewController.m //??01-NSOperation基本1 // //??Created?by?孔醫己?on?14-6-25. //??Copyright?(c)?2014年?itcast.?All?rights?reserved. // #import?"YYViewController.h" @interface?YYViewController?() @end @implementation?YYViewController -?(void)viewDidLoad {[super?viewDidLoad];//NSOperation:抽象類,不具備封裝功能//創建操作對象,封裝要執行的任務//NSInvocationOperation???封裝操作NSInvocationOperation?*operation=[[NSInvocationOperation?alloc]initWithTarget:self?selector:@selector(test)?object:nil];//執行操作[operation?start]; } -(void)test {NSLog(@"--test--%@--",[NSThread?currentThread]); } @end

打印查看:

注意:操作對象默認在主線程中執行,只有添加到隊列中才會開啟新的線程。即默認情況下,如果操作沒有放到隊列中queue中,都是同步執行。只有將NSOperation放到一個NSOperationQueue中,才會異步執行操作?

?

2.NSBlockOperation子類

創建對象和添加操作:

//創建NSBlockOperation操作對象NSBlockOperation?*operation=[NSBlockOperation?blockOperationWithBlock:^{//......}];//添加操作[operation?addExecutionBlock:^{//....}];

代碼示例:

代碼1:

// //??YYViewController.m //??02-NSTherad基本2 // //??Created?by?孔醫己?on?14-6-25. //??Copyright?(c)?2014年?itcast.?All?rights?reserved. // #import?"YYViewController.h" @interface?YYViewController?() @end @implementation?YYViewController -?(void)viewDidLoad {[super?viewDidLoad];//創建NSBlockOperation操作對象NSBlockOperation?*operation=[NSBlockOperation?blockOperationWithBlock:^{NSLog(@"NSBlockOperation------%@",[NSThread?currentThread]);}];//開啟執行操作[operation?start]; } @end

打印查看:

代碼2:

// //??YYViewController.m //??02-NSTherad基本2 // //??Created?by?孔醫己?on?14-6-25. //??Copyright?(c)?2014年?itcast.?All?rights?reserved. // #import?"YYViewController.h" @interface?YYViewController?() @end @implementation?YYViewController -?(void)viewDidLoad {[super?viewDidLoad];//創建NSBlockOperation操作對象NSBlockOperation?*operation=[NSBlockOperation?blockOperationWithBlock:^{NSLog(@"NSBlockOperation------%@",[NSThread?currentThread]);}];//添加操作[operation?addExecutionBlock:^{NSLog(@"NSBlockOperation1------%@",[NSThread?currentThread]);}];[operation?addExecutionBlock:^{NSLog(@"NSBlockOperation2------%@",[NSThread?currentThread]);}];//開啟執行操作[operation?start]; } @end

注意:只要NSBlockOperation封裝的操作數 > 1,就會異步執行操作?

?

3.NSOperationQueue

NSOperationQueue的作:NSOperation可以調start法來執任務,但默認是同步執行的

如果將NSOperation添加到NSOperationQueue(操作隊列)中,系統會自動異步執行NSOperation中的操作

添加操作到NSOperationQueue中,自動執行操作,自動開啟線程

//創建NSOperationQueueNSOperationQueue?*?queue=[[NSOperationQueue?alloc]init];//把操作添加到隊列中//第一種方式[queue?addOperation:operation1];[queue?addOperation:operation2];[queue?addOperation:operation3];//第二種方式[queue?addOperationWithBlock:^{NSLog(@"NSBlockOperation3--4----%@",[NSThread?currentThread]);}];

- (void)addOperation:(NSOperation *)op;
- (void)addOperationWithBlock:(void (^)(void))block;?

代碼示例:

// //??YYViewController.m //??03-NSOperation基本3 // //??Created?by?孔醫己?on?14-6-25. //??Copyright?(c)?2014年?itcast.?All?rights?reserved. // #import?"YYViewController.h" @interface?YYViewController?() @end @implementation?YYViewController -?(void)viewDidLoad {[super?viewDidLoad];//創建NSInvocationOperation對象,封裝操作NSInvocationOperation?*operation1=[[NSInvocationOperation?alloc]initWithTarget:self?selector:@selector(test1)?object:nil];NSInvocationOperation?*operation2=[[NSInvocationOperation?alloc]initWithTarget:self?selector:@selector(test2)?object:nil];//創建對象,封裝操作NSBlockOperation?*operation3=[NSBlockOperation?blockOperationWithBlock:^{NSLog(@"NSBlockOperation3--1----%@",[NSThread?currentThread]);}];[operation3?addExecutionBlock:^{NSLog(@"NSBlockOperation3--2----%@",[NSThread?currentThread]);}];//創建NSOperationQueueNSOperationQueue?*?queue=[[NSOperationQueue?alloc]init];//把操作添加到隊列中[queue?addOperation:operation1];[queue?addOperation:operation2];[queue?addOperation:operation3]; } -(void)test1 {NSLog(@"NSInvocationOperation--test1--%@",[NSThread?currentThread]); } -(void)test2 {NSLog(@"NSInvocationOperation--test2--%@",[NSThread?currentThread]); } @end

打印效果:

注意:系統自動將NSOperationqueue中的NSOperation對象取出,將其封裝的操作放到一條新的線程中執行。上面的代碼示例中,一共有四個任務,operation1和operation2分別有一個任務,operation3有兩個任務。一共四個任務,開啟了四條線程。通過任務執行的時間全部都是273可以看出,這些任務是并行執行的。

提示:隊列的取出是有順序的,與打印結果并不矛盾。這就好比,選手A,BC雖然起跑的順序是先A,后B,然后C,但是到達終點的順序卻不一定是A,B在前,C在后。

下面使用for循環打印,可以更明顯的看出任務是并發執行的。

代碼示例:

#import?"YYViewController.h" @interface?YYViewController?() @end @implementation?YYViewController -?(void)viewDidLoad {[super?viewDidLoad];//創建NSInvocationOperation對象,封裝操作NSInvocationOperation?*operation1=[[NSInvocationOperation?alloc]initWithTarget:self?selector:@selector(test1)?object:nil];NSInvocationOperation?*operation2=[[NSInvocationOperation?alloc]initWithTarget:self?selector:@selector(test2)?object:nil];//創建對象,封裝操作NSBlockOperation?*operation3=[NSBlockOperation?blockOperationWithBlock:^{for?(int?i=0;?i<5;?i++)?{NSLog(@"NSBlockOperation3--1----%@",[NSThread?currentThread]);}}];[operation3?addExecutionBlock:^{for?(int?i=0;?i<5;?i++)?{NSLog(@"NSBlockOperation3--2----%@",[NSThread?currentThread]);}}];//創建NSOperationQueueNSOperationQueue?*?queue=[[NSOperationQueue?alloc]init];//把操作添加到隊列中[queue?addOperation:operation1];[queue?addOperation:operation2];[queue?addOperation:operation3]; } -(void)test1 {for?(int?i=0;?i<5;?i++)?{NSLog(@"NSInvocationOperation--test1--%@",[NSThread?currentThread]);} } -(void)test2 {for?(int?i=0;?i<5;?i++)?{NSLog(@"NSInvocationOperation--test2--%@",[NSThread?currentThread]);} } @end

轉載于:https://blog.51cto.com/5934497/1718215

總結

以上是生活随笔為你收集整理的IOS学习之多线程(9)--NSOperation简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人精品在线看 | 俄罗斯精品一区二区三区 | 91人妻一区二区 | 猛男被粗大男男1069 | 狠狠的日| 欧美性在线观看 | 日韩欧美一区二区三区四区五区 | 国产精品偷伦视频免费看 | 久久大胆视频 | 午夜精品一区二区三区在线 | 久久香蕉影视 | 精品国产1区2区 | 激情婷婷综合 | 精品久久久久久久久久久国产字幕 | 日本免费在线视频观看 | 狠狠撸狠狠干 | 男女野外做受全过程 | 久久91精品 | 激情戏网站 | 日韩三级黄色 | 久久系列 | 美女试爆场恐怖电影在线观看 | 国产丝袜网站 | 黄色avav| 最新免费av | 天天躁日日躁bbbbb | yy6080午夜 | 久草免费福利 | 欧美一区二区免费 | www.青青操| 久久55 | 美国一级黄色大片 | 91小宝寻花一区二区三区 | 经典三级第一页 | 精品无码一区二区三区的天堂 | 日本免费一区二区三区最新 | 丝袜熟女一区二区三区 | 熟妇人妻无码xxx视频 | 黄色一级片 | 亚洲精品一区二 | 国产一级在线观看视频 | 欧美日韩国产三级 | 懂色一区二区三区免费观看 | 亚洲美女自拍 | 欧美日本精品 | 永久免费在线看片 | 姐姐av | 欧美日韩亚洲一区二区 | 黄色国产一区 | 中文字幕亚洲乱码熟女1区2区 | 欧美视频一区二区三区四区 | 亚洲a成人 | 亚洲国产成人精品激情在线 | 日本成人一区二区 | 99国产精品白浆在线观看免费 | 国产在线免费av | 国产女人呻吟高潮抽搐声 | 成人在线看片 | 亚洲卡一卡二卡三 | 四虎成人精品永久免费av | 亚洲涩涩 | 中文国产字幕 | 农村脱精光一级 | 99热精品在线观看 | 精品成人一区二区三区 | 一级黄色免费看 | 久热精品在线 | 成人免费xxxxx在线观看 | 久久极品| 日韩最新在线 | 极品少妇一区二区 | 久久精品国产亚洲av久一一区 | 激情久久网 | 日本孕妇孕交 | 国产欧美一区二区精品性色超碰 | 日本精品三级 | 中文字幕亚洲成人 | 久久亚洲av成人无码国产电影 | 日本xx视频免费观看 | 久久久久久婷 | www.久久久.com | 日本久久99 | 美女午夜激情 | 国产精品一卡二卡三卡 | 麻豆传媒在线观看视频 | 在线国产中文字幕 | 成人精品在线看 | 欧美日韩少妇精品 | 依人成人综合网 | 亚洲涩涩爱| 亚洲精品aa | 曰批又黄又爽免费视频 | 亚洲日本色| 成人免费一区二区三区在线观看 | 亚洲第一精品网站 | 天天谢天天干 | 在线看不卡av | 中文字幕在线三区 | 欧美日韩中文字幕在线观看 |