runloop和線程有什么關(guān)系? runloop的mode作用是什么?

1、總的說來,Run loop,正如其名,loop表示某種循環(huán),和run放在一起就表示一直在運(yùn)行著的循環(huán)。實(shí)際上,run loop和線程是緊密相連的,可以這樣說run loop是為了線程而生,沒有線程,它就沒有存在的必要。Run loops是線程的基礎(chǔ)架構(gòu)部分, Cocoa 和 CoreFundation 都提供了 run loop 對象方便配置和管理線程的 run loop (以下都以 Cocoa 為例)。每個(gè)線程,包括程序的主線程( main thread )都有與之相應(yīng)的 run loop 對象。

runloop 和線程的關(guān)系:

主線程的run loop默認(rèn)是啟動(dòng)的。

iOS的應(yīng)用程序里面,程序啟動(dòng)后會有一個(gè)如下的main()函數(shù)

intmain(intargc,char* argv[]) {@autoreleasepool {returnUIApplicationMain(argc, argv,nil,NSStringFromClass([AppDelegateclass]));}}

重點(diǎn)是UIApplicationMain()函數(shù),這個(gè)方法會為main thread設(shè)置一個(gè)NSRunLoop對象,這就解釋了:為什么我們的應(yīng)用可以在無人操作的時(shí)候休息,需要讓它干活的時(shí)候又能立馬響應(yīng)。

對其它線程來說,run loop默認(rèn)是沒有啟動(dòng)的,如果你需要更多的線程交互則可以手動(dòng)配置和啟動(dòng),如果線程只是去執(zhí)行一個(gè)長時(shí)間的已確定的任務(wù)則不需要。

在任何一個(gè) Cocoa 程序的線程中,都可以通過以下代碼來獲取到當(dāng)前線程的 run loop 。

NSRunLoop*runloop = [NSRunLoopcurrentRunLoop];

參考鏈接:《Objective-C之run loop詳解》

2、model 主要是用來指定事件在運(yùn)行循環(huán)中的優(yōu)先級的,分為:

NSDefaultRunLoopMode(kCFRunLoopDefaultMode):默認(rèn),空閑狀態(tài)

UITrackingRunLoopMode:ScrollView滑動(dòng)時(shí)

UIInitializationRunLoopMode:啟動(dòng)時(shí)

NSRunLoopCommonModes(kCFRunLoopCommonModes):Mode集合

蘋果公開提供的 Mode 有兩個(gè):

NSDefaultRunLoopMode(kCFRunLoopDefaultMode)

NSRunLoopCommonModes(kCFRunLoopCommonModes)

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

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

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