Not sure why you need two arguments, you should be able to just write the code in the original block.
In the following examples, assume we want to first call [self.test foo1] then [self.test foo2].
The simplest solution is to not create a new method at all. Simply call your code:
[self.test foo1];
[self.test foo2];
foo2 will be performed after foo1.
The second simplest solution is to create the function with only one argument:
[ViewController performGenericBlock:^{
[self.test foo1];
[self.test foo2];
}];
If you really do need 2 arguments, you would do the following:
[ViewController performGenericBlock:^{
[self.test foo1];
} actionWhenDone:^{
[self.test foo2];
}];
... and define the method like so:
+ (void)performGenericBlock:(void(^)(void))code actionWhenDone:(void(^)(void))action {
code();
action();
}