讓我們先來看看Wikipedia中叫做Associative array的詞條,是如下解釋的:An associative array (also associative container , map , mapping , dictionary , finite map , and in query-PRocessing an index or index file ) is an abstract data type composed of a collection of unique keys and a collection of values, where each key is associated with one value (or set of values).Associative array是一個數據類型,并且這個數據類型有很多名字,比如有人叫做dictionary,有人叫做map。學習C++的人應該熟悉map數據類型,map數據類型是STL中定義的關聯容器。Dictionary數據類型的要點是屬性和值。Dictionary數據類型是由若干屬性組成的,每個屬性有一個或者多個值。在實際應用中,Dictionary數據類型可以更加復雜,一個屬性可以有如下方面屬性類型屬性值的個數,一個或者多個屬性的訪問權限,可讀,可寫等。不難看出一個屬性本身的類型,屬性個數等又是一些屬性。在Darwin中,就是這么應用的。Darwin視頻服務器中Dictionary數據類型的應用在Darwin中針對Dictionary的定義有兩個類,分別是QTSSDictionary和QTSSDictionaryMap。QTSSDictionary 與QTSS_Object對應,QTSSDictionaryMap與QTSS_ObjectType對應。QTSS_Object為模塊和服務器核心之間提供了數據交換的方法。QTSS_Object由若干屬性構成,每個屬性有自己名字,ID號,數據類型,讀寫權限。內建屬性是QTSS對象的固有屬性,比如QTSS_RTSPRequestObject對象的內建屬性URL,通過這個屬性,模塊可以獲取與RTSP請求關聯的URL。除了內建的屬性,還可以為字典類型的對象添加靜態屬性或者臨時屬性。通過回調函數QTSS_AddStaticAttribute可以為對象類型添加靜態屬性,只能在Register角色中調用添加靜態屬性的函數。靜態屬性只能被添加,不能移除。不像靜態屬性,臨時屬性可以被移除,通過調用函數QTSS_RemoveInstanceAttribute可以移除一個臨時屬性。Darwin提供了針對Dictionary的回調函數,全部是對Dictionary的屬性進行操作的。向Dictionary對象實例添加一個臨時的屬性。向Dictionary類型添加一個靜態的屬性。通過屬性ID號或者屬性名獲取屬性的信息。循環獲取對象多有屬性的信息。獲取對象屬性的個數。通過各種方式獲取屬性的值。設置屬性的值。如圖所示,是Darwin中定義的Dictionary類型的對象。以qtssRTSPRequestObjectType這個Dictionary類型為例,它的屬性描述了一個RTSP請求。RTSP請求對象(QTSS_RTSPRequestObject)是對象類型的實例,這個實例從服務器接收到客戶端的RTSP請求開始到應答完成結束。RTSP請求需與RTSP會話(QTSS_RTSPsessionObject)關聯。下面給出RTSP請求的一些屬性:qtssRTSPReqAbsoluteURL,“rtsp://”起始的URL。qtssRTSPReqContentLen,RTSP請求的內容長度。不難看出,由于采用了Dictionary這種數據類型,使得Darwin具有了如下特性:便于模塊和服務器核心交換數據使得服務器的可管理共容易實現