你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 看法iOS的RunLoop

看法iOS的RunLoop

編輯:IOS開發綜合

RunLoop是線程中的一個事情處置循環,用來不時監聽事情輸出,並將其分配到相應的中央停止處置。

但是RunLoop不止是循環這麼復雜,它對事情停止了籠統和封裝,使你免去處置瑣碎的事情

並且它能在有任務的時分任務,沒任務的時分休眠。

線程與RunLoop

RunLoop是線程的根底架構,每個線程,包括main線程都有與之對應的RunLoop

main線程的RunLoop是默許翻開的,IOS順序在main函數的UIApplicationMain辦法中,為main線程設置了一個NSRunLoop對象

所以我們的順序可以在有操作的時分及時呼應,沒操作的時分進入休眠,以增加資源占用

其他線程的RunLoop是默許不翻開的,當你需求更多的線程交互時,可以手動配置

RunLoop對象

CFRunLoopRef是在 CoreFoundation 框架內的,它提供了純 C 函數的 API,一切這些 API 都是線程平安的。

NSRunLoop 是基於 CFRunLoopRef 的封裝,提供了面向對象的 API,但是這些 API 不是線程平安的。

NSRunLoop *mainRunLoop = [NSRunLoop mainRunLoop];
NSLog(@"#mainRunLoop:%p", mainRunLoop);

NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
NSLog(@"#currentRunLoop:%p", currentRunLoop);

CFRunLoopRef cfMainRunLoop = CFRunLoopGetMain();
NSLog(@"#cfMainRunLoop:%p", cfMainRunLoop);

CFRunLoopRef cfCurrentRunLoop = CFRunLoopGetCurrent();
NSLog(@"#cfCurrentRunLoop:%p", cfCurrentRunLoop);

// 子線程的RunLoop是默許不翻開的,需求自己創立
NSThread *newThread = [[NSThread alloc] initWithBlock:^{
    // 子線程的RunLoop是懶加載的,在子線程中創立RunLoop,調用currentRunLoop辦法即可
    NSRunLoop *newRunLoop = [NSRunLoop currentRunLoop];
    NSLog(@"#newRunLoop:%p", newRunLoop);
}];
[newThread start];
什麼時分運用RunLoop

當你的順序需求輔佐線程的時分,開啟RunLoop可以堅持線程長時間存活。

參考文章

深化了解RunLoop
IOS開發-Runloop詳解
RunLoop的復雜引見

【看法iOS的RunLoop】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved