NSOperation

2019-07-16  本文已影响0人  CaptainRoy

大神连接

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(runInvocation) object:NULL];
    [operation start];

-(void)runInvocation
{
    NSLog(@" %@ ",[NSThread currentThread]); // <NSThread: 0x60000281e900>{number = 1, name = main}
}

⚠️ 单独使用 NSInvocationOperation , 不会创建一个线程,只会在当前线程中执行

NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
        for (NSInteger i = 0; i < 3; i++) {
            NSLog(@" %@ ",[NSThread currentThread]); // <NSThread: 0x6000029f5400>{number = 1, name = main}
            [NSThread sleepForTimeInterval:2.0f];
        }
    }];
    
    [blockOperation addExecutionBlock:^{
        [NSThread sleepForTimeInterval:2.0f];
        NSLog(@" 增加 %@",[NSThread currentThread]); // 增加 <NSThread: 0x6000029a5040>{number = 3, name = (null)}
    }];
    
    [blockOperation start];

⚠️ 同上,在当前线程做操作,但是 addExecutionBlock 追加的操作是开辟一个线程执行

// 创建队列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    
    NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(runInvocation) object:NULL];
    
    NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:2.0f];
        NSLog(@"NSBlockOperation - %@",[NSThread currentThread]);
        [NSThread sleepForTimeInterval:2.0f];
    }];
    
    [queue addOperation:invocationOperation];
    [queue addOperation:blockOperation];
// 创建队列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    
    [queue addOperationWithBlock:^{
        [NSThread sleepForTimeInterval:2.0f];
        NSLog(@"1 %@ ",[NSThread currentThread]);
    }];
    [queue addOperationWithBlock:^{
        [NSThread sleepForTimeInterval:2.0f];
        NSLog(@"2 %@ ",[NSThread currentThread]);
    }];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"1 - %@",[NSThread currentThread]);
    }];
    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"2 - %@",[NSThread currentThread]);
    }];
    [op2 addDependency:op1];
    [queue addOperation:op1];
    [queue addOperation:op2];
上一篇 下一篇

猜你喜欢

热点阅读