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)
我可以从主队列调用,也可以不调用.
你真的想避免将代码块放在宏参数中.如果您必须调试该代码,那么您会讨厌自己.(有点舌头,但如果你必须调试任何扩展到多行代码的宏,那真的很痛苦.)