RN調(diào)用iOS方法,執(zhí)行延時(shí)

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];
  })
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容