日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

5 蘋(píng)果開(kāi)發(fā)人員技術(shù)文檔連載之-系統(tǒng)架構(gòu)( 八 )



當(dāng)設(shè)備驅(qū)動(dòng)程序所控制的輸入設(shè)備(例如:鼠標(biāo)或鍵盤(pán))探測(cè)到一個(gè)用戶(hù)動(dòng)作時(shí),會(huì)觸發(fā)一個(gè)低級(jí)事件 。在Mac OS X中,由構(gòu)成所有設(shè)備驅(qū)動(dòng)程序基礎(chǔ)的I/O Kit來(lái)創(chuàng)建事件,并把它們放入視窗服務(wù)器的事件隊(duì)列中(對(duì)視窗服務(wù)器的探討參見(jiàn)“Quartz Compositor”) 。這個(gè)隊(duì)列被放置在由I/O Kit和視窗服務(wù)器所共享使用的內(nèi)存塊中 。一旦I/O Kit把一個(gè)事件放入隊(duì)列中,它就通過(guò)Mach進(jìn)程間通訊機(jī)制(IPC)通知視窗服務(wù)器 。

這時(shí),視窗服務(wù)器把事件從隊(duì)列中取出,并查詢(xún)當(dāng)前打開(kāi)窗口的數(shù)據(jù)庫(kù) 。視窗服務(wù)器再把事件發(fā)送到隸屬于一個(gè)特定進(jìn)程的運(yùn)行循環(huán)的事件端口中,而該特定進(jìn)程擁有事件發(fā)生所在窗口的所有權(quán) 。Carbon事件管理器從運(yùn)行循環(huán)端口獲得事件,以合適的形式把事件打包,發(fā)送給特定的應(yīng)用程序環(huán)境下的該進(jìn)程的事件處理機(jī)制 。這種機(jī)制確保了事件可由所點(diǎn)擊控件(或按鍵)的相關(guān)函數(shù)和方法來(lái)進(jìn)行處理 。

事件處理機(jī)制對(duì)于每個(gè)應(yīng)用程序環(huán)境都是不同的:

·Carbon Carbon具有幾種供應(yīng)用程序來(lái)處理事件的機(jī)制 。主要的機(jī)制是使用EventRefs,這種隱含的低級(jí)事件結(jié)構(gòu) 。EventRefs的處理程序被安裝在用戶(hù)界面對(duì)象上(包括人性化接口工具箱的默認(rèn)對(duì)象),這些處理程序自動(dòng)接收全部或部分指定到這些對(duì)象上的事件 。處理程序可以忽略事件、處理事件或把它傳遞給外圍容器內(nèi)的下一個(gè)處理程序 。事件處理使用DefProc消息,并且可以使用函數(shù)回調(diào) 。

·Cocoa 在Cocoa中,事件作為NSEvent對(duì)象被打包 。該對(duì)象被送到能負(fù)責(zé)對(duì)一個(gè)應(yīng)用進(jìn)程進(jìn)行全面管理的應(yīng)用程序?qū)ο笾?。應(yīng)用程序?qū)ο蟀袾SEvent對(duì)象轉(zhuǎn)發(fā)給事件發(fā)生所在窗口的第一響應(yīng)程序(first-responder)視圖 。通過(guò)順次響應(yīng)程序(next-responder)機(jī)制,如果事件沒(méi)有被處理的話,事件對(duì)象將在窗口視圖中被逐級(jí)傳送,直到它到達(dá)應(yīng)用程序?qū)ο笞陨?。如果事件與一個(gè)用戶(hù)界面控件所關(guān)聯(lián),它的典型處理方式是通過(guò)一個(gè)稱(chēng)為“目標(biāo)動(dòng)作(target-action)”的機(jī)制來(lái)進(jìn)行的 。

·Java 在Java中事件處理是通過(guò)java.awt.Event和java.awt.Component類(lèi)來(lái)實(shí)現(xiàn)的 。

推薦閱讀