美文网首页
NSInvocationOperation简介

NSInvocationOperation简介

作者: 行走的栀子花 | 来源:发表于2016-12-15 16:58 被阅读66次

简书写的第二篇文章,紧接着上一篇而来,照常将苹果官方文档翻译如下:

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:&para 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:@"好棒"];
    }```

相关文章

网友评论

      本文标题:NSInvocationOperation简介

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