NSInvocationOperation和NSBlockOperation之间有什么区别

Mob*_*Dev 16 iphone objective-c nsoperation ios

Foundation Framework(NSOperation,NSInvocationOperationand NSBlockOperation)中有三个操作类.

我已经阅读了并发编程指南,但我不明白这三个类之间究竟有什么区别.请帮我.

Mat*_*uch 31

NSBlockOperation一个街区.NSInvocationOperation执行NSInvocation(或由target,selector,object定义的方法).NSOperation必须是子类,它提供了最大的灵活性,但需要最多的代码.

NSBlockOperation和NSInvocationOperation都是NSOperation的子类.它们由系统提供,因此您不必为简单任务创建新的子类.

对于大多数任务,使用NSBlockOperation和NSInvocationOperation应该足够了.


这是一个代码示例,使用这三个完全相同的东西:

// For NSOperation subclass
@interface SayHelloOperation : NSOperation
@end

@implementation SayHelloOperation

- (void)main {
    NSLog(@"Hello World");
}

@end

// For NSInvocationOperation
- (void)sayHello {
    NSLog(@"Hello World");
}


- (void)startBlocks {
    NSBlockOperation *blockOP = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"Hello World");
    }];
    NSInvocationOperation *invocationOP = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(sayHello) object:nil];
    SayHelloOperation *operation = [[SayHelloOperation alloc] init];

    NSOperationQueue *q = [[NSOperationQueue alloc] init];
    [q addOperation:blockOP];
    [q addOperation:invocationOP];
    [q addOperation:operation];
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您在每个操作中使用不同的文本将它们彼此分开,而不是一遍又一遍地使用“Hello World”,那就太好了。只是一个建议 (2认同)

Nit*_*hel 4

与 Apple doc 一样NSInvocationOperationNSBlockOperation两者都是NSOperation

NSIncationOperation 类

NSIncationOperation 类是 NSOperation 的具体子类,它管理指定为调用的单个封装任务的执行。您可以使用此类来启动一个操作,该操作包括调用指定对象上的选择器。该类实现了非并发操作


NSBlockOperation 类

NSBlockOperation 类是 NSOperation 的具体子类,用于管理一个或多个块的并发执行。您可以使用此对象一次执行多个块,而无需为每个块创建单独的操作对象。当执行多个块时,只有当所有块都执行完毕时,操作本身才被认为完成。

添加到块操作的块将以默认优先级分派到适当的工作队列。块本身不应对其执行环境的配置做出任何假设。