美文网首页
NSOperation

NSOperation

作者: CaptainRoy | 来源:发表于2019-07-16 15:20 被阅读0次

大神连接

  • NSInvocationOperation
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
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 并发执行
// 创建队列
    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];

相关文章

网友评论

      本文标题:NSOperation

      本文链接:https://www.haomeiwen.com/subject/softlctx.html