是否可以在主线程上运行完成块?
例如,我有一个返回值的方法:
- (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 */
}
];
}
但我看不到如何从完成块中返回整数值作为此方法的结果,因为完成块在后台线程上运行。
我该怎么做?
答案 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);
}];
}