是否可以将一个完全形成的块(一个包含所有参数的块)传递给一个方法,然后在该方法中执行该块?
目前我在我的项目中重复了这个结构:
if (//block exists)
{
if (self.returnOnMainThread)
{
dispatch_async(dispatch_get_main_queue(), ^
{
//call block here
});
}
else
{
//call block here
}
}
但是理想情况下,我想将上面的代码块抽象成类似于以下的方法:
- (void) reportSuccessWithBlock:(GenericBlockType)block{
if (block)
{
if (self.returnOnMainThread)
{
dispatch_async(dispatch_get_main_queue(), ^
{
block;
});
}
else
{
block;
}
}
}
编辑:
块的类型不会提前知道。
所以调用路径可能看起来像这样
- (void) someMethod:(void (^)(NSArray *array))success
{
//Some code here setting up the array to be passed back
[self reportSuccessWithBlock:success(array)];
}
上面的代码中有一些假设(我不知道是可能的):
- 方法可以接受通用块类型
- 一个块可以在其所有参数存在的情况下传递,但没有实际执行