- 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];
网友评论