自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解析Flex事件機(jī)制的三個(gè)階段

開(kāi)發(fā) 后端
本文向大家介紹一下Flex事件機(jī)制中的基本概念,每個(gè)事件對(duì)象中都包括事件類型(type)和事件源(target),便于event listener知道該事件的類型以及是誰(shuí)拋出這樣的事件。

在學(xué)習(xí)Flex的過(guò)程中,你可能會(huì)遇到Flex事件機(jī)制這方面的問(wèn)題,這里和大家分享一下Flex事件機(jī)制的解決方法,希望本文的介紹能讓你有所收獲。

Flex事件機(jī)制中的基本概念

event objects(事件對(duì)象):所有的事件對(duì)象都是flash.events.Event或者其子類。比如說(shuō)鼠標(biāo)事件MouseEvent,計(jì)時(shí)器事件TimerEvent。每個(gè)事件對(duì)象中都包括事件類型(type)和事件源(target),便于event listener知道該事件的類型以及是誰(shuí)拋出這樣的事件。簡(jiǎn)單的理解,事件對(duì)象就是ActionScript中的各種事件類型的對(duì)象。
    event dispatchers(事件源):是事件發(fā)起的主體。所有的dispatcher都是EventDispatcher或其子類。事件觸發(fā)源必須提供API讓listener進(jìn)行對(duì)該事件的注冊(cè)(register)。簡(jiǎn)單的理解,事件源就是一個(gè)控件。
    event listeners(事件監(jiān)聽(tīng)器):在AS 3.0中它往往表現(xiàn)為一個(gè)函數(shù)。我們必須為每個(gè)特殊的事件和事件源注冊(cè)一個(gè)監(jiān)聽(tīng)器,當(dāng)事件發(fā)生的時(shí)候,事件源(dispatcher)會(huì)通知該監(jiān)聽(tīng)器去處理制定的事件。簡(jiǎn)單的理解,監(jiān)聽(tīng)器就是一個(gè)函數(shù)。

注冊(cè)監(jiān)聽(tīng)器

在AS 3.0中可以通過(guò)下面的語(yǔ)法格式進(jìn)行注冊(cè)。

  1. dispatcher.addEventListener(eventName, listener);  

當(dāng)然在Flex中還有另外一種格式,在mxml文件中對(duì)一個(gè)控件的事件直接制定一個(gè)處理函數(shù),如

  1. <mx:Button label="TestClick" click="clickHandler()"/> 

Flex事件機(jī)制中事件階段

我們把事件觸發(fā)源分為兩類:一類是那些顯示在界面中的元素拋出的事件,一類是那些不在界面中顯示的元素拋出的事件。很簡(jiǎn)單,舉個(gè)例子:***類如URLLoader對(duì)象去load圖片或其他資源所拋出的如complete事件,就屬于***類。界面上的一個(gè)按鈕所拋出的click事件就是第二類,它會(huì)觸發(fā)一個(gè)事件流,引發(fā)一系列的事件,它又分三個(gè)階段:捕獲(capture),執(zhí)行(target) 和冒泡(bubble),姑且這樣表達(dá)這三個(gè)階段。

捕獲階段(capture)

在這個(gè)階段,F(xiàn)lash Player會(huì)去查找事件的觸發(fā)源,它是通過(guò)根顯示元素(root display object)逐層向下尋蹤,直到找到事件的發(fā)起源頭,如你在button上click后,F(xiàn)lash Player找到的事該button對(duì)象。在這個(gè)階段監(jiān)視器(listener)默認(rèn)是不會(huì)收到任何消息的(默認(rèn)只在target和bubble階段收到消息)。

如果你想在捕獲階段讓listener收到消息并有所動(dòng)作,那么你可以在注冊(cè)的時(shí)候改變第三個(gè)參數(shù)為true,如下面的方法:object.addEventListener(MouseEvent.CLICK, onClick, true);

該階段聽(tīng)起來(lái)很陌生,事實(shí)上它很少使用。但它卻在事件流中扮演很重要的角色。它可以在事件到達(dá)子元素(child elements)之前被application捕獲,當(dāng)然也就可以阻 止事件到達(dá)子元素。

目標(biāo)執(zhí)行階段(target)

在這個(gè)階段是事件的執(zhí)行階段,也就是我們常用的用來(lái)處理事件流的代碼。

冒泡階段(bubble)

***的這個(gè)階段其實(shí)就是***個(gè)階段的逆向過(guò)程。它就是在事件代碼執(zhí)行完畢后通過(guò)子元素逐級(jí)向父元素發(fā)出該事件,一直到根元素。在這個(gè)階段你不需要特別的為監(jiān)聽(tīng)器指定什么,你只要正常的注冊(cè)事件就可以了。監(jiān)聽(tīng)器會(huì)在該階段收到通知。但前提是該事件是能夠bubble的。

垃圾回收

Flash Player是通過(guò)引用計(jì)數(shù)器(reference counting)以及標(biāo)記與清除(mark and sweep)來(lái)實(shí)現(xiàn)垃圾回收的。

引用計(jì)數(shù)器簡(jiǎn)單的講就是給每個(gè)對(duì)象分配的技術(shù)器,一旦該對(duì)象的計(jì)數(shù)器為0時(shí),就表示該對(duì)象可能不再被使用,可以安全的清除了。它的弊端就是不能解決循環(huán)引用問(wèn)題,一旦出現(xiàn)循環(huán)引用,就不能通過(guò)該方法進(jìn)行垃圾回收。

而標(biāo)記與清除(mark and sweep)就是為了解決循環(huán)引用問(wèn)題的。它是通過(guò)在程序中遍歷每個(gè)活動(dòng)的、可到達(dá)的節(jié)點(diǎn),一旦發(fā)現(xiàn)一些節(jié)點(diǎn)是處在活動(dòng)節(jié)點(diǎn)之外的,就被認(rèn)為不再有用,就可以被回收了。

這兩種機(jī)制是聯(lián)合運(yùn)行在垃圾回收過(guò)程中來(lái)保證正確回收資源。但他們并不能回收程序錯(cuò)誤導(dǎo)致的垃圾。而監(jiān)聽(tīng)器的注冊(cè)就最容易導(dǎo)致這個(gè)問(wèn)題的發(fā)生。

【編輯推薦】

  1. 技術(shù)分享 用FlexBuilder創(chuàng)建Flex項(xiàng)目
  2. Flex基礎(chǔ) 創(chuàng)建***個(gè)Flex項(xiàng)目
  3. 深入剖析Flex事件機(jī)制
  4. FlexBuilder3.0與Eclipse3.4的***結(jié)合
  5. 學(xué)習(xí)筆記 FlexBuilder2.0中如何使用基于Lists的控件 
責(zé)任編輯:佚名 來(lái)源: csdn.net
相關(guān)推薦

2010-08-06 10:03:42

Flex事件

2017-12-26 05:40:52

物聯(lián)網(wǎng)IT數(shù)據(jù)

2010-11-15 10:50:43

Oracle啟動(dòng)模式

2010-08-04 13:23:29

Flex事件

2010-07-29 10:33:59

Flex鍵盤事件

2010-08-04 13:52:53

Flex事件機(jī)制

2023-09-08 14:09:31

云轉(zhuǎn)型云技術(shù)

2010-08-13 14:05:24

Flex事件機(jī)制

2010-08-12 15:35:44

Flex事件機(jī)制

2010-08-06 09:45:50

Flex事件機(jī)制

2010-08-09 15:09:27

Flex數(shù)據(jù)訪問(wèn)

2009-06-10 19:20:21

IT職業(yè)人士職場(chǎng)

2020-12-28 17:03:09

區(qū)塊鏈比特幣金融

2010-08-04 14:07:59

Flex事件機(jī)制

2010-08-13 14:19:44

Flex綁定機(jī)制

2010-08-09 11:14:36

Flex事件處理

2013-08-01 10:16:06

Linux

2021-08-06 09:47:01

鴻蒙HarmonyOS應(yīng)用

2011-08-22 14:21:00

瀏覽器

2022-04-20 20:31:19

元宇宙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)