在子執行緒呼叫performSelector: withObject: afterDelay 延時方法無效
最近在專案中發現performSelector: withObject: afterDelay
延時操作有時是無效的,程式沒有繼續執行。經過程式碼的分析發現這種情況一般都是發現在子執行緒中,結合runloop大概分析是以下原因。
- 程式碼分析
- (void)foo1 {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performSelector:@selector(foo2) withObject:nil afterDelay:2];
});
}
- (void)foo2 {
NSLog(@"foo2");
}
在這種情況下程式是沒有任何反應的,foo2並不會在延時之後執行。
我們先看下foo1,在該方法中首先建立一個非同步執行的任務,這時會開闢一個子執行緒,在這個子執行緒中我們去做了一個延時的處理,但是這個延時是基於執行迴圈的,而在子執行緒的runloop預設是不開啟的,需要手動去開啟[[NSRunLoop currentRunLoop] run]
,所以在這種情況下延時操作是無效的。而在主執行緒runloop是預設開啟的所以一般情況下用performSelector: withObject: afterDelay
做延時處理並沒有問題。
相關文章
- performSelector:withObject:afterDelay: 在子執行緒中呼叫不執行performSelectorObject執行緒
- 避免DbContext同時在多個執行緒呼叫Context執行緒
- 關於performSelector:afterDelay:的一個坑及思考performSelector
- cookie時效無限延長方案Cookie
- Qt 子執行緒呼叫connect/QMetaObject::invokeMethod 不呼叫槽函式問題QT執行緒Object函式
- Thread 中的 join() 方法的作用是呼叫執行緒等待該執行緒執行完後,再繼續執行thread執行緒
- 保證執行緒在主執行緒執行執行緒
- iOS執行器performSelector詳解iOSperformSelector
- QT 主執行緒子執行緒互相傳值QT執行緒
- java執行緒執行緒休眠,sleep方法Java執行緒
- 多執行緒(五)---執行緒的Yield方法執行緒
- 子執行緒與UI執行緒的通訊(委託)執行緒UI
- pyqt5 子執行緒如何操作主執行緒GUIQT執行緒GUI
- 模擬主執行緒等待子執行緒的過程執行緒
- 一步步瞭解執行緒池之定時延遲執行-ScheduledThreadPool執行緒thread
- 執行緒同步方法執行緒
- 同個執行緒裡,如果執行緒正在忙過程中,定時器時間到了會被延遲觸發嗎?執行緒定時器
- C# 帶引數帶互鎖多執行緒呼叫方法C#執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- Java多種方法實現等待所有子執行緒完成再繼續執行Java執行緒
- nodejs使用child_process模組啟動(exec和spawn)子執行緒任務,子程序例項的kill()方法無效的問題NodeJS執行緒
- Swift多執行緒:使用Thread進行多執行緒間通訊,協調子執行緒任務Swift執行緒thread
- 在使用 selenium grid 在 node 節點執行時,對於非 input 框檔案上傳操作無效
- 閱讀器關閉時嘗試呼叫 Read 無效。
- 呼叫JavaCalls::call()方法來執行Java方法Java
- 多執行緒核心技術(1)-執行緒的基本方法執行緒
- 執行時Hook所有Block方法呼叫的技術實現HookBloC
- 在netty3.x中存在兩種執行緒:boss執行緒和worker執行緒。Netty執行緒
- C# WinForm 執行緒間操作無效: 從不是建立控制元件的執行緒訪問它的解決辦法C#ORM執行緒控制元件
- ScheduledThreadPoolExecutor原始碼分析-你知道定時執行緒池是如何實現延遲執行和週期執行的嗎?thread原始碼執行緒
- 子執行緒使用父執行緒RequestScope作用域Bean問題的探究執行緒Bean
- (MFC)子執行緒的資料如何傳遞給主執行緒中?執行緒
- 20.Eclipse下Ndk開發(pthread開啟執行緒呼叫Java方法)Eclipsethread執行緒Java
- Android進階:六、在子執行緒中直接使用 Toast 及其原理Android執行緒AST
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- 如何在子執行緒中更新UI執行緒UI
- 子執行緒 UI 問題捉蟲執行緒UI
- 造成類在多執行緒時不安全的原因執行緒