NSInvocableOperation 和 NSBlockOperation 有什么区别

2024-01-16

Foundation Framework中共有三个操作类(NSOperation, NSInvocationOperation and NSBlockOperation).

我已经读过并发编程指南 https://developer.apple.com/library/mac/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationObjects/OperationObjects.html#//apple_ref/doc/uid/TP40008091-CH101-SW1但我不明白这三个类之间到底有什么区别。请帮我。


NSBlockOperation https://developer.apple.com/library/ios/documentation/cocoa/reference/NSBlockOperation_class/Reference/Reference.html执行一个块。NSInvocationOperation https://developer.apple.com/library/ios/documentation/cocoa/reference/NSInvocationOperation_Class/Reference/Reference.html#//apple_ref/occ/cl/NSInvocationOperation执行一个NSInvocation https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSInvocation_Class/Reference/Reference.html(或由目标、选择器、对象定义的方法)。NSOperation https://developer.apple.com/library/ios/documentation/cocoa/reference/NSOperation_class/Reference/Reference.html#//apple_ref/occ/cl/NSOperation必须子类化,它提供了最大的灵活性,但需要最多的代码。

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

对于大多数任务来说,使用 NSBlockOperation 和 NSInitationOperation 应该足够了。


下面是使用这三个方法执行完全相同操作的代码示例:

// 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];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSInvocableOperation 和 NSBlockOperation 有什么区别 的相关文章

随机推荐