NSInvocationOperation和NSBlockOperation之间有什么区别 [英] What is the difference between NSInvocationOperation and NSBlockOperation

查看:156
本文介绍了NSInvocationOperation和NSBlockOperation之间有什么区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Foundation Framework中有三个操作类( NSOperation NSInvocationOperation NSBlockOperation )。

There are three operation classes in Foundation Framework(NSOperation, NSInvocationOperation and NSBlockOperation).

我已经阅读了并发编程指南但我不明白到底是什么这三个类之间的区别。请帮我。

I already read the concurrency programming guide but I did't understand exactly what is the difference between these three classes. Please help me.

推荐答案

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

NSBlockOperation exectues a block. NSInvocationOperation executes a NSInvocation (or a method defined by target, selector, object). NSOperation must be subclassed, it offers the most flexibility but requires the most code.

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

NSBlockOperation and NSInvocationOperation are both subclasses of NSOperation. They are provided by the system so you don't have to create a new subclass for simple tasks.

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

Using NSBlockOperation and NSInvocationOperation should be enough for most tasks.

这是一个使用所有三个完全相同的代码示例:

Here is a code example for the use of all three that do exactly the same thing:

// 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];
}

这篇关于NSInvocationOperation和NSBlockOperation之间有什么区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆