Delphi窗體的close,free,destroy等

[本人baidu博客全部搬家到csdn,baidu博客地址:http://hi.baidu.com/new/miracleconf]

Delphi對窗體的關閉有多個函數:

Hide
Close
Free
Release
Destroy
Terminate
FreeAndNil()
Halt

這些函數的區別是什麼呢?

Free:先對象判斷不爲空再destroy。釋放對象,對於窗體來說,只會釋放對象,而不將窗體對象的指針指向nil,所以free後用assigned函數來判斷還是返回true,只有freeandnil或free後再將指針指向nil。
Destroy:不判斷對象是否爲空直接釋放。如果對象已經釋放的話會報錯。用destroy不安全,可以說free是對destroy的封裝和改進;
Terminate:Application對象的方法,終止整個應用程序,對於控制檯程序,必須用halt代替。
Hide:只是將窗體做隱藏處理。
Close:對於窗體而言,close與hide的區別是如果窗體內有方法執行,close會終止窗體對象所執行的方法.而hide不會釋放窗體及其所有的對象,更不會使指針指向nil。
Halt:終止整個應用程序。
FreeAndNil (): 釋放對象並把指針指向nil,比較的安全且效率會高些,能提高內存的利用率。
Release:調用這個方法時會觸發free 事件。Release可以在onshow的事件中調用而free不可以。Release等待資源不再使用後釋放資源,同樣不修改form指針爲nil,所以最好使用release進行資源釋放操作。
在對窗體操作時,單純通過assigned(form1)判斷窗體是否已經創建是不夠的,因爲如果窗體通過free /release進行資源釋放的話,form1指向的是一個未知地址,而非nil,所以需要用(not Assigned(ShowForm)) and (not (ShowForm is TForm2)) 來判斷該窗體是否已經創建在內存中 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章