在子執行緒呼叫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執行緒
- 指定執行緒延遲時間(毫秒)執行緒
- cookie時效無限延長方案Cookie
- onDestroy方法被延時執行~事件事件
- Java多執行緒/併發07、Thread.Join()讓呼叫執行緒等待子執行緒Java執行緒thread
- 關於performSelector:afterDelay:的一個坑及思考performSelector
- [原] Android performClick無效,UI執行緒理解AndroidORMUI執行緒
- QT 主執行緒子執行緒互相傳值QT執行緒
- 保證執行緒在主執行緒執行執行緒
- tweak 中常用的方法呼叫方法和 執行時APIAPI
- Thread 中的 join() 方法的作用是呼叫執行緒等待該執行緒執行完後,再繼續執行thread執行緒
- java執行緒執行緒休眠,sleep方法Java執行緒
- iOS執行器performSelector詳解iOSperformSelector
- 模擬主執行緒等待子執行緒的過程執行緒
- 子執行緒與UI執行緒的通訊(委託)執行緒UI
- 多執行緒(五)---執行緒的Yield方法執行緒
- 同個執行緒裡,如果執行緒正在忙過程中,定時器時間到了會被延遲觸發嗎?執行緒定時器
- 關閉應用程式時如何關閉子執行緒執行緒
- 一步步瞭解執行緒池之定時延遲執行-ScheduledThreadPool執行緒thread
- 在SLSB呼叫後的java類寫多執行緒可以麼?Java執行緒
- Java多種方法實現等待所有子執行緒完成再繼續執行Java執行緒
- C# 帶引數帶互鎖多執行緒呼叫方法C#執行緒
- a:active在ios上無效解決方法iOS
- java多執行緒之延遲初始化Java執行緒
- Thread.join()方法實現main()方法等待所有子執行緒執行完成[base jdk8]threadAI執行緒JDK
- Java調優—Btrace監控Java執行緒/方法執行引數、執行時間(Windows)Java執行緒Windows
- Java多執行緒-無鎖Java執行緒
- Swift多執行緒:使用Thread進行多執行緒間通訊,協調子執行緒任務Swift執行緒thread
- C# WinForm 執行緒間操作無效: 從不是建立控制元件的執行緒訪問它的解決辦法C#ORM執行緒控制元件
- 執行時Hook所有Block方法呼叫的技術實現HookBloC
- 如何正確終止正在執行的子執行緒執行緒
- (MFC)子執行緒的資料如何傳遞給主執行緒中?執行緒
- 子執行緒使用父執行緒RequestScope作用域Bean問題的探究執行緒Bean
- Control的Invoke和BeginInvoke 是相對於支線執行緒(因為一般在支線執行緒中呼叫,用來更新主執行緒ui)Invoke立即插入主執行緒中執行,而BeginInvoke 要等主執行緒結束才執行執行緒UI
- 多執行緒核心技術(1)-執行緒的基本方法執行緒
- Android 執行緒優化之執行緒池shutdown方法Android執行緒優化
- java執行緒學習5——執行緒同步之同步方法Java執行緒
- 在使用 selenium grid 在 node 節點執行時,對於非 input 框檔案上傳操作無效