iOS開(kāi)發(fā)多線程篇—NSOperation簡(jiǎn)單介紹

一、NSOperation簡(jiǎn)介

1.簡(jiǎn)單說(shuō)明

NSOperation的作?:配合使用NSOperation和NSOperationQueue也能實(shí)現(xiàn)多線程編程

NSOperation和NSOperationQueue實(shí)現(xiàn)多線程的具體步驟:

(1)先將需要執(zhí)行的操作封裝到一個(gè)NSOperation對(duì)象中

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

(3)系統(tǒng)會(huì)?動(dòng)將NSOperationQueue中的NSOperation取出來(lái)

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

2.NSOperation的子類(lèi)

NSOperation是個(gè)抽象類(lèi),并不具備封裝操作的能力,必須使?它的子類(lèi)

使用NSOperation?類(lèi)的方式有3種:

(1)NSInvocationOperation

(2)NSBlockOperation

(3)自定義子類(lèi)繼承NSOperation,實(shí)現(xiàn)內(nèi)部相應(yīng)的?法

二、 具體說(shuō)明

1.NSInvocationOperation子類(lèi)

- (void)viewDidLoad

?{

? ? ?[super viewDidLoad];

? ? ?//NSOperation:抽象類(lèi),不具備封裝功能

? ? ?//創(chuàng)建操作對(duì)象,封裝要執(zhí)行的任務(wù)

? ? ?//NSInvocationOperation? 封裝操作

?? ? NSInvocationOperation *operation=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];

? ? //執(zhí)行操作

? ? ?[operation start];

}

-(void)test{

? ? ?NSLog(@"--test--%@--",[NSThread currentThread]);

?}

2.NSBlockOperation子類(lèi)

- (void)viewDidLoad {

? ? ?[super viewDidLoad];

//創(chuàng)建NSBlockOperation操作對(duì)象? ? //創(chuàng)建NSBlockOperation操作對(duì)象

? ? NSBlockOperation *operation=[NSBlockOperation blockOperationWithBlock:^{

? ? ? ? NSLog(@"NSBlockOperation------%@",[NSThread currentThread]);

? ? }];

? ? //添加操作

? ? [operation addExecutionBlock:^{

? ? ? ? NSLog(@"NSBlockOperation1------%@",[NSThread currentThread]);

? ? }];

? ? [operation addExecutionBlock:^{

? ? ? ? NSLog(@"NSBlockOperation2------%@",[NSThread currentThread]);

? ? }];

? ? //開(kāi)啟執(zhí)行操作

? ? [operation start];

? ? ? }

3.NSOperationQueue

- (void)viewDidLoad{

?? ?[super viewDidLoad];

?? ?//創(chuàng)建NSInvocationOperation對(duì)象,封裝操作

? ? NSInvocationOperation *operation1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test1) object:nil];

? ? NSInvocationOperation *operation2=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test2) object:nil];

? ? //創(chuàng)建對(duì)象,封裝操作

? ? NSBlockOperation *operation3=[NSBlockOperation blockOperationWithBlock:^{

? ? ? ? NSLog(@"NSBlockOperation3--1----%@",[NSThread currentThread]);

? ? }];

? ? [operation3 addExecutionBlock:^{

? ? ? ? NSLog(@"NSBlockOperation3--2----%@",[NSThread currentThread]);

? ? }];

? ? //創(chuàng)建NSOperationQueue

? ? NSOperationQueue * queue=[[NSOperationQueue alloc]init];

? ? ?//把操作添加到隊(duì)列中

? ? ?[queue addOperation:operation1];

? ? [queue addOperation:operation2];

?[queue addOperation:operation3];

?}

-(void)test1

{

? ? ?NSLog(@"NSInvocationOperation--test1--%@",[NSThread currentThread]);

?}

?-(void)test2

?{

? ? ?NSLog(@"NSInvocationOperation--test2--%@",[NSThread currentThread]);

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容