runloop和線程有什么關系?


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

runloop 和線程的關系:

1. 主線程的run loop默認是啟動的。

iOS的應用程序里面,程序啟動后會有一個如下的main()函數

int main(int argc, char * argv[]) {
@autoreleasepool {    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

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

2. 對其它線程來說,run loop默認是沒有啟動的,如果你需要更多的線程交互則可以手動配置和啟動,如果線程只是去執行一個長時間的已確定的任務則不需要。

3. 在任何一個 Cocoa 程序的線程中,都可以通過以下代碼來獲取到當前線程的 run loop 。

NSRunLoop *runloop = [NSRunLoop currentRunLoop];

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM