为GCD调用写宏?

zum*_*zum 4 macros xcode grand-central-dispatch ios

我想为GCD调用创建一个宏,例如:

dispatch_async(dispatch_get_main_queue(), ^{
    stuff....
});
Run Code Online (Sandbox Code Playgroud)

宏看起来像这样:main(^ {...})?

不知道如何写它.有什么建议吗?

谢谢

smp*_*kes 11

建议:不要.除此之外,它还会在调试中搞砸行号.

你可以实际定义一个普通的函数,如果你愿意,也可以做同样的事情

typedef void(^VoidBlock)();
void on_main(VoidBlock block) {
    dispatch_async(dispatch_get_main_queue(), block);
}
Run Code Online (Sandbox Code Playgroud)

这样做的好处是在调试期间不会丢失块的行号.我甚至做过类似的事情

void on_main(VoidBlock block) {
  if (dispatch_get_current_queue() == dispatch_get_main_queue()) {
    block();
  } else {
    dispatch_sync(dispatch_get_main_queue(), block);
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以从主队列调用,也可以不调用.

真的想避免将代码块放在宏参数中.如果您必须调试该代码,那么您会讨厌自己.(有点舌头,但如果你必须调试任何扩展到多行代码的宏,那真的很痛苦.)