简书写的第二篇文章,紧接着上一篇而来,照常将苹果官方文档翻译如下:
NSInvocationOperation是NSOperation的一个具体的子类,用来管理一个由invocation对象封装的任务的执行操作。你可以利用NSInvocationOperation类来执行一个操作,这个操作由方法和指定的object对象(参数)组成。这个操作是非并发执行的。
这是一个简单的对任务进行封装的类,是NSOperation的具体的子类,我们可以直接使用。
初始化的方式又两种,一种是
NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doSomething:) object:@"仰望星空的小哥"];```
第二种
NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc]initWithInvocation:invocation];```
感觉和NSBlockOperation的功能也没多少差别,不知道苹果为什么要弄出这么一个方便使用的类出来,如果有人知道请留言告诉我,非常感谢。
NSInvocationOperation使用方法如下:
- (IBAction)doInvocationOperationAction:(id)sender{
//创建一个NSInvocationOperation对象
NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doSomething:) object:@"仰望星空的小哥"];
[invocationOperation start];
NSString *result = [invocationOperation result];
NSLog(@"result:%@",result);
}```
第二种方式
-
(IBAction)doInvocationOperationAction2:(id)sender{
//利用invocation创建invocationOperation
NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:@selector(doSomething:)];//创建invocation
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
invocation.target = self;
invocation.selector = @selector(doSomething:);
NSString *para = @"仰望星空的小哥2";
[invocation setArgument:¶ atIndex:2];NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc]initWithInvocation:invocation];
[invocationOperation start];
NSString *result = [invocationOperation result];
NSLog(@"result:%@",result);
} -
(NSString *)doSomething:(NSString *)name{
NSLog(@"name:%@, %@",name, [NSThread currentThread]);
return [name stringByAppendingString:@"好棒"];
}```
网友评论