一、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]);
}