Q:
公司的iOS項(xiàng)目是RN寫(xiě)的,但有時(shí)不免還是需要調(diào)用一些iOS原生的功能,比如調(diào)用iOS系統(tǒng)彈框等。RN調(diào)用iOS方法參考該鏈接
我iOS開(kāi)放了個(gè)方法給RN,用于吊起iOS原生alert,可是我發(fā)現(xiàn)有延時(shí),很久之后彈框才彈出來(lái)。
A:
后來(lái)調(diào)試發(fā)現(xiàn),RN調(diào)用iOS的方法時(shí),另開(kāi)了線程,沒(méi)在主線程,所以,iOS內(nèi)的方法執(zhí)行有延遲。
和朋友討論后,他給了個(gè)宏,安全獲取主線程執(zhí)行。哈哈哈,此處@奔跑的炸雞,并獻(xiàn)上炸雞,以示感謝??。OK,代碼如下??:
/**
添加同步任務(wù)到主線程
*/
#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];
})
}