iOS應用,事件處理整個過程簡要說明。從事件被生產到被消費

iOS事件

iOS事件,代表手指觸摸應用視圖或者用戶搖晃設備。 當手指觸摸或者搖晃設備時,iPhone的多觸摸系統就會註冊這些觸摸作爲事件,並把他們發送給當前應用去處理。

事件循環

在主事件循環中,一個應用持續把接收到的事件路由到相應的對象上去處理,處理結果由對象去呈現並記錄狀態。 一個事件循環,就是一個簡單的run-loop。 run-loop ,週期運行並平衡處理從各種綁定的數據源接受到的事件。 每一個線程,都有一個run-loop。除了主線程之外,其它線程的run-loop必須由代碼配置啓動,主線程中的run-loop , 是由應用自動運行的 。 主線程的run-loop和其它線程的run-loop ,區別之處在於,主線程run-loop的輸入源從操作系統接受事件,這些事件都是由用戶產生的, 例如: 點擊view或者用鍵盤輸入文本等。

事件處理流程

應用一旦啓動,它就會爲主事件循環做一些初始化操作, 應用會和底層負責轉發用戶事件的組件建立連接。 應用通過安裝在主線程的run-loop的輸入源接收事件。 因爲應用必須單獨並有序的處理每一個事件,所以這些事件會被放到一個先進先出的事件隊列中。

一旦應用界面出現在屏幕上,應用就被事件驅動。 應用獲取隊列中最頂層的事件,然後分發給應用中對應的對象去處理。 當分發過程完成後,應用就會從隊列中取出下一個事件並再次分發,一直循環,直到應用終止。

當應用獲取到事件,會被分發給發生事件的window,window再分發事件給最適合處理它的視圖view上, 也就是知名的hit-test-view(前提條件,必須是UIResponder對象或者派生類,而且有意願成爲第一響應者。- (BOOL)canBecomeFirstResponder { return YES; }
)。 如果這個view不能處理這個事件, 事件會沿着響應者鏈向上進行傳遞,直到被處理或者被丟棄。

在這裏插入圖片描述

響應者鏈

響應者鏈,可以理解爲鏈表。
響應者鏈,允許response對象,有責任轉發待處理事件給其它對象。 待處理事件,向上傳遞,直到被處理或被丟棄。
例如,如果一個視圖view由view controller管理,那麼如果view無法處理事件,則view controller成爲next responder
在這裏插入圖片描述

參考:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章