宏在主线程上运行方法

Ada*_*mke 4 multithreading objective-c ios

我想要一种简单的方法来在一个方法的开头删除代码,该方法将强制该方法仅在主线程上运行(因为该方法更新了UI元素).

目前,我有类似的东西:

 if (![NSThread isMainThread]){
    [self performSelectorOnMainThread:_cmd withObject:_results waitUntilDone:NO];
    return;
}
Run Code Online (Sandbox Code Playgroud)

但是我想要一种方法将它包含在一个宏中而不必输入方法的参数.看起来应该有一些方法来迭代传递给当前方法的参数列表并创建一个NSInvocation或类似的.有什么想法吗?

Ric*_*III 5

这会有用吗?

#define dispatch_main($block) (dispatch_get_current_queue() == dispatch_get_main_queue() ? $block() : dispatch_sync(dispatch_get_main_queue(), $block))
Run Code Online (Sandbox Code Playgroud)

如果你从主线程中调用它也会有效,这是一个奖励.如果您需要异步调用,只需使用dispatch_async而不是dispatch_sync.