Q:
公司的iOS项目是RN写的,但有时不免还是需要调用一些iOS原生的功能,比如调用iOS系统弹框等。RN调用iOS方法参考该链接
我iOS开放了个方法给RN,用于吊起iOS原生alert,可是我发现有延时,很久之后弹框才弹出来。
A:
后来调试发现,RN调用iOS的方法时,另开了线程,没在主线程,所以,iOS内的方法执行有延迟。
和朋友讨论后,他给了个宏,安全获取主线程执行。哈哈哈,此处@奔跑的炸鸡,并献上炸鸡,以示感谢🍗。OK,代码如下👇:
/**
添加同步任务到主线程
*/
#define dispatch_main_sync_safe(block)\
if ([NSThread isMainThread]) {\
block();\
} else {\
dispatch_sync(dispatch_get_main_queue(), block);\
}
使用eg:
+ (void)alertShowMsg:(NSString *)msg
{
dispatch_main_sync_safe(^{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:msg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];
[alert show];
})
}