如何从完成块中检索返回值?

时间:2011-12-08 14:01:50

标签: iphone ios objective-c-blocks grand-central-dispatch

是否可以在主线程上运行完成块?

例如,我有一个返回值的方法:

- (int)test
{

    /* here one method is called with completion block with return type void */

    [obj somemethodwithcompeltionblock:
      {
         /* here I am getting my Int which I want to return */
      }
      ];
}

但我看不到如何从完成块中返回整数值作为此方法的结果,因为完成块在后台线程上运行。

我该怎么做?

1 个答案:

答案 0 :(得分:29)

您缺少一些关于使用块进行异步开发的基础知识。除了自己的范围之外,您不能从任何地方返回调度块。将每个块视为自己的方法,而不是内联代码。

我认为你所寻找的东西与此类似......

- (void)testWithHandler:(void(^)(int result))handler
{
    [obj somemethodwithcompeltionblock:^{
            int someInt = 10;
            dispatch_async(dispatch_get_main_queue(), ^{
                handler(10);
            });
      }
      ];
}


- (void)callSite
{
    [self testWithHandler:^(int testResult){
        NSLog(@"Result was %d", testResult);
    }];
}