有没有一种方法可以像这样向NSOperationQueue添加块?

10

我正在尝试理解NSOperationQueue,并尝试创建可能的最简单的示例。我有以下内容:

NSOperationQueue *myOQ=[[NSOperationQueue alloc] init];

[myOQ addOperationWithBlock:^(void){
  NSLog(@"here is something for jt 2");
}];
[myOQ addOperationWithBlock:^(void){
  NSLog(@"oh is this going to work 2");
}];

但想要做这件事:

void  (^jt)() = ^void(){
  NSLog(@"here is something for jt");
};

void (^cl)() = ^void(){
  NSLog(@"oh is this going to work");
};

NSOperationQueue *myOQ=[[NSOperationQueue alloc] init];

[myOQ addOperation:jt];
[myOQ addOperation:cl];

这种后一种形式可行吗?我可以将一个块转换为NSOperation吗?

提前感谢。


不,那样行不通,但你为什么要这么做呢?你想达到什么目的? - Paul.s
刚开始学习,有一个简单的例子:这也很有帮助,但是也要读一下评论 http://eng.pulse.me/concurrent-downloads-using-nsoperationqueues/ - timpone
3个回答

29

你可以:

NSBlockOperation *jtOperation = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"here is something for jt");
}];

NSBlockOperation *clOperation = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"oh is this going to work");
}];

[myOQ addOperation:jtOperation];
[myOQ addOperation:clOperation];

虽然如此,我通常会使用addOperationWithBlock,除非我真的需要NSOperation对象指针来执行其他操作(例如建立操作之间的依赖关系等)。


2

您也可以这样做

[operationQueue addOperationWithBlock:^{
    // Stuff
})];

0

Swift

let networkingOperation = NSBlockOperation(block: {
                             // Your code here
                          })

2
你的解决方案很有吸引力,但是永远不应该使用NSBlockOperation来封装异步函数,比如网络请求。相反地,应该适当地子类化NSOperationNSOperationQueue用于执行异步任务,也就是NSOperation实例。NSBlockOperation只是一个帮助器,可以将同步操作加入队列。在这种情况下,然而,你几乎总是最好使用调度队列。 - CouchDeveloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接