3 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
默認(rèn)情況下,-performSelectorOnMainThread:withObject:waitUntilDone:
僅計(jì)劃選擇器以默認(rèn)運(yùn)行循環(huán)模式運(yùn)行。如果運(yùn)行循環(huán)處于另一種模式(例如跟蹤模式),則在運(yùn)行循環(huán)切換回默認(rèn)模式之前它不會(huì)運(yùn)行。您可以使用該變體來(lái)解決此問(wèn)題-performSelectorOnMainThread:withObject:waitUntilDone:modes:
(通過(guò)傳遞您希望它在其中運(yùn)行的所有模式)。
另一方面,dispatch_async(dispatch_get_main_queue(), ^{ ... })
一旦主運(yùn)行循環(huán)將控制流返回到事件循環(huán),就會(huì)運(yùn)行該塊。它不在乎模式。因此,如果您也不想關(guān)心任何模式,dispatch_async()
可能是更好的選擇。

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
可能是因?yàn)閜erformSelectorOnMainThread:withObject:waitUntilDone:使用常見(jiàn)的運(yùn)行循環(huán)模式將消息排隊(duì)。根據(jù)Apple的《并發(fā)編程指南》,主隊(duì)列將把排隊(duì)的任務(wù)與應(yīng)用程序運(yùn)行循環(huán)中的其他事件進(jìn)行交錯(cuò)。因此,如果事件隊(duì)列中還有其他事件要處理,則調(diào)度隊(duì)列中的已排隊(duì)塊可以先運(yùn)行,即使它們是稍后提交的。
本文是performSelectorOnMainThreadvs. 的出色解釋dispatch_async,它也回答了上述問(wèn)題。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
你試試PerformSelectorOnMainThread用waitUntilDone=YES
例如:
碼:
[viewController performSelectorOnMainThread:@selector(methodThatAddsSubview:) withObject:otherView waitUntilDone:YES];
我認(rèn)為這可能會(huì)解決問(wèn)題,因?yàn)闉槭裁碢erformSelectorOnMainThread需要這么長(zhǎng)時(shí)間才能做出回應(yīng)。
- 3 回答
- 0 關(guān)注
- 1011 瀏覽
添加回答
舉報(bào)