Foundation Framework中有三个操作类(NSOperationNSInvocationOperationNSBlockOperation)。

我已经读过concurrency programming guide,但我不完全了解这三个类之间的区别。请帮我。

最佳答案

NSBlockOperation 执行一个块。 NSInvocationOperation 执行 NSInvocation (或由目标,选择器,对象定义的方法)。 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];
}

关于iphone - NSInvocationOperation和NSBlockOperation有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18632271/

10-09 16:21