In this code
id (^block)(void) = ^(void) { return nil; };
I have this error
Incompatible block pointer types ini
You're using an inferred return type for your block literal, but you don't have to.
The correct way to remove that error is to provide a return type for the block literal:
id (^block)(void) = ^id{ return nil; };