本文地址:http://www.aygfsteel.com/cpenet/archive/2006/07/04/56539.html
本篇譯自《 Eclipse.Building.Commercial.Quality.Plug.ins.2nd.Edition 》第四章第二節(jié),希望對入門者有所幫助。
組件的生命周期
設(shè)計(jì) SWT 的一個(gè)目標(biāo)就是小而靈巧。為了達(dá)到這個(gè)目標(biāo),一個(gè)基本的設(shè)計(jì)策略,就是盡可能的使組件的狀態(tài)存儲(chǔ)在平臺(tái)組件中而不是存儲(chǔ)在 SWT 組件中 ( 這句話,我不理解,也翻譯的不明白,附原文: To achieve this, a basic design decision was made that as much widget state as possible would be stored in the platform widget rather than in the SWT widget.) 。這與 Swing 形成顯著的對比, Swing 在 Swing 組件中維護(hù)了所有的組件狀態(tài)。 ( 可能是這樣: SWT 把各個(gè)組件的狀態(tài)交給系統(tǒng)平臺(tái)來管理,而 Swing 自己管理各個(gè) Swing 組件的狀態(tài),這樣 Swing 就復(fù)雜,耗費(fèi)的資源,內(nèi)存的需求也多,不知道是不是 J ) 。通過不把系統(tǒng)平臺(tái)級(jí)別的組件信息復(fù)制過來自己維護(hù), SWT 就非常的小巧而且對內(nèi)存的需求也相應(yīng)少。
達(dá)到這個(gè)目的所付出的代價(jià)就是 SWT 的組件不能夠自己獨(dú)立存在。當(dāng)一個(gè) SWT 組件被創(chuàng)建時(shí),同時(shí)立即在系統(tǒng)平臺(tái)下也創(chuàng)建了該組件的對應(yīng)體。接下來,幾乎所有對該組件的信息狀態(tài)請求都會(huì)由平臺(tái)來處理。
大部分的系統(tǒng)平臺(tái)在創(chuàng)建一個(gè)組件時(shí),需要該組件明確的父組件的上下文,所以 SWT 需要一個(gè)父組件來最為它的構(gòu)造聲明。許多平臺(tái)在創(chuàng)建組件時(shí)還需要該組件的特定風(fēng)格參數(shù)的設(shè)定。例如:按鈕有復(fù)選框,單選框,簡單按鈕和文本域有單行和多行之分。
在 SWT 類中,風(fēng)格位段用整數(shù)類型來定義且不會(huì)更改。風(fēng)格參數(shù)被組織在一起,其它各種構(gòu)造器傳遞著這些參數(shù)來創(chuàng)建一個(gè)組件的初始風(fēng)格。注意到,所有的平臺(tái)并不支持所有的風(fēng)格,所以在很多情況下,被請求的風(fēng)格被認(rèn)為是一種提示,它或許會(huì)或許不會(huì)對一個(gè)特殊的平臺(tái)產(chǎn)生影響。
當(dāng) SWT 組件不在需要時(shí),一些平臺(tái)要求作出明確的釋放。對于組件本身和一些資源 ( 例如:圖形,字體,顏色 ) 而言,他們已經(jīng)具備了系統(tǒng)的這個(gè)要求。基本的規(guī)則是:如果你創(chuàng)建了一個(gè)組件,就要使用 dispose() 方法來撤銷這個(gè)組件。如果你使用了一些系統(tǒng)資源,例如系統(tǒng)顏色,你就不需要釋放他們。
幸運(yùn)的,當(dāng)一個(gè)組件被釋放的,它的所有子組件會(huì)自動(dòng)地被釋放。這意味著,如果你釋放了一個(gè) shell ,那么所有 shell 包含的組件都會(huì)被自動(dòng)釋放。
posted @ 2006-07-04 14:52 燕然 閱讀(995) | 評(píng)論 (1) | 編輯 收藏