在Java應用中,我們不會關心什麼時候去明確的釋放資源,因為Java的記憶體回收機制已經處理了所有的資源。但是,在SWT中間,我們必須再次擔負起其中的一些責任(自己釋放資源)。回想一下,SWT的資源是對Java在真是的作業系統中的資源進行記憶體的分配與釋放。在你不再需要它(資源)的時候需要釋放。
SWT有兩個規則涉及到widget的處理:
1. 如果你建立它,你必須釋放它。
2. 釋放父親的時候釋放所有的孩子。
什麼意思呢?那個規則適合於那些具體的環境呢?首先,讓我們看一下第二個規則,它陳述的是一個父控制項會去釋放他的所有的孩子。一個shell或者是任意
一個Composite(組件)對象會去釋放他們的孩子。大多數SWT的控制項在構造的時候需要你指定父親。這就意味著,在大多數的情況下,我們不用明確的在你的widget中去釋放資源。當你用SWT的控制項設計一個Wizard Page、preference page或者任何彈出框的時候,你不需要擔心釋放,因為你涉及到了父控制項,典型的就是Composite對象。
那第一條規則怎麼應用呢?當你在它們的構造器中沒有指定父組件(parent wigdet)去應用SWT對象的時候。一些例子如:Font、Image和Color。他們是被共用的,就算是它們沒有一個父親。因此,釋放是需要的。Shell類有一個釋放的方法,各種不同的會話頁的類也也一樣。IWorkbenchPart是views和editores的超類, 同樣有一個釋放的方法。應用這些方法去釋放你的widget。
Font例子(參照原文)
如果你想通知一個組件(Widget)的釋放,可以通過addDisposeListener方法,這個方法在所有的Widget中都可以用。(覺得這句比較有用,其它具體的例子參照原文)。
如果你必須管理很多的字型和映像,考慮一下FontRegistry和ImageRegistry類。它們維護註冊的字型和映像,並且會自動的為你去釋放。事實上,你可以永遠不釋放任何被這些註冊器(如:ImageRegistry)管理的東西。
由於這篇文章已經翻譯很久了,也忘記了出處在那裡,反正就記得是一本對eclipse講解很好的書
更多精彩內容:http://www.eclipselight.org/