基于RunLoop的事件處理流程

按鍵(HOME鍵、鎖屏鍵、音量鍵等)、傳感器(搖晃、加速等)、觸摸屏幕等【物理事件】會(huì)觸發(fā)IOKit.framework生成一個(gè)IOHIDEvent對(duì)象,然后SpringBoard會(huì)接收這個(gè)對(duì)象并通過(guò)mach port發(fā)給當(dāng)前App的進(jìn)程;接下來(lái)進(jìn)程會(huì)觸發(fā)RunLoop的基于port的Source1回調(diào)一個(gè)__IOHIDEventSystemClientQueueCallback()的API,這個(gè)API會(huì)相應(yīng)觸發(fā)Source0來(lái)調(diào)用__UIApplicationHandleEventQueue(),而此API再將傳遞到此的IOHIDEvent處理包裝成上層所熟悉的UIEvent。最后UIEvent會(huì)被分發(fā)給UIWindow根據(jù)Respond chain來(lái)響應(yīng)事件。

梳理整個(gè)流程如下:

物理事件 (按鍵、傳感器、觸摸等)

|

IOHIDEvent (由IOKit.framework生成,SpringBoard接收)

|

App進(jìn)程 (由mach port內(nèi)核消息通信機(jī)制傳遞Event,SpringBoard->App)

|

觸發(fā)Source1

|

回調(diào) __IOHIDEventSystemClientQueueCallback()

|

觸發(fā)Source0

|

回調(diào)__UIApplicationHandleEventQueue()

|

將IOHIDEvent封裝成UIEvent

|

識(shí)別此事件是UIGesture或屏幕旋轉(zhuǎn)等

|

分發(fā)UIWindow

|

根據(jù)響應(yīng)鏈交給對(duì)應(yīng)的responder進(jìn)行事件回調(diào)

而這整個(gè)事件處理流程是基于RunLoop的基本處理循環(huán)進(jìn)行的。在main函數(shù)開(kāi)始后,主線程的runloop對(duì)象被創(chuàng)建完。如UIEvent、UI繪制等會(huì)統(tǒng)一在主線程的runloop對(duì)象的即將進(jìn)入休眠前的時(shí)間點(diǎn)觸發(fā)各自對(duì)應(yīng)的代理回調(diào)方法,然后runloop進(jìn)入休眠,直到被timer定時(shí)器或Source1發(fā)來(lái)的內(nèi)核消息事件喚醒,再分別對(duì)Timer、Source0、Source1發(fā)來(lái)的事件進(jìn)行處理回調(diào)。

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

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

  • http://www.cocoachina.com/ios/20150601/11970.html RunLoop...
    紫色冰雨閱讀 953評(píng)論 0 3
  • 轉(zhuǎn)載:http://www.cocoachina.com/ios/20150601/11970.html RunL...
    Gatling閱讀 1,558評(píng)論 0 13
  • 轉(zhuǎn)自http://blog.ibireme.com/2015/05/18/runloop 深入理解RunLoop ...
    飄金閱讀 1,087評(píng)論 0 4
  • RunLoop 是 iOS 和 OS X 開(kāi)發(fā)中非?;A(chǔ)的一個(gè)概念,這篇文章將從 CFRunLoop 的源碼入手,...
    iOS_Alex閱讀 972評(píng)論 0 10
  • position:relative和負(fù)margin都可以使元素位置發(fā)生變化,但是它們二者是有區(qū)別的。 positi...
    輝夜乀閱讀 551評(píng)論 0 0

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