深刻淺出 RunLoop(一):初識
深刻淺出 RunLoop(二):數據結構
深刻淺出 RunLoop(三):事件循環機制
深刻淺出 RunLoop(四):RunLoop 與線程
深刻淺出 RunLoop(五):RunLoop 與 NSTimer
深刻淺出 RunLoop(六):相關面試題html
RunLoop
是經過內部維護的事件循環來對事件/消息進行管理的一個對象;RunLoop
不是一個簡單的do...while
循環,它涉及到用戶態和內核態之間的切換。事件循環就是對事件/消息進行管理,事件循環能夠達到:面試
mach_msg()
函數來轉移當前線程的控制權給內核態/用戶態。RunLoop
,main()
函數一執行完,程序就會馬上退出。main()
函數中調用了UIApplicationMain
函數,這個函數內部會啓動主線程的RunLoop
;RunLoop
:NSRunLoop
(是CFRunLoopRef
的封裝,提供了面向對象的 API)CFRunLoopRef
NSRunLoop
和CFRunLoopRef
都表明着RunLoop
對象NSRunLoop
不開源,而CFRunLoopRef
是開源的:Core Foundation 源碼RunLoop
對象的方式:// Foundation
[NSRunLoop mainRunLoop]; // 獲取主線程的 RunLoop 對象
[NSRunLoop currentRunLoop]; // 獲取當前線程的 RunLoop 對象
// Core Foundation
CFRunLoopGetMain(); // 獲取主線程的 RunLoop 對象
CFRunLoopGetCurrent(); // 獲取當前線程的 RunLoop 對象
複製代碼
NSTimer
在滑動時中止工做的問題performSelector...
方法