Q:
公司的iOS項目是RN寫的,但有時不免還是需要調(diào)用一些iOS原生的功能设拟,比如調(diào)用iOS系統(tǒng)彈框等慨仿。RN調(diào)用iOS方法參考該鏈接
我iOS開放了個方法給RN,用于吊起iOS原生alert纳胧,可是我發(fā)現(xiàn)有延時镰吆,很久之后彈框才彈出來。
A:
后來調(diào)試發(fā)現(xiàn)跑慕,RN調(diào)用iOS的方法時万皿,另開了線程,沒在主線程相赁,所以相寇,iOS內(nèi)的方法執(zhí)行有延遲。
和朋友討論后钮科,他給了個宏唤衫,安全獲取主線程執(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];
})
}