delphi : 窗体的close,free,destroy
一、我用application.create(TForm2,Form2)語句,創建了Form2,可是調用了Form2.close后,重新調用Form2.show. 剛才所創建的Form2仍然存在。問為了節約資源,應該怎樣使用close,free,destroy. 三者的關系是什么?
1、Action:=caFree。
2、 with TForm1.Create(Application) do
Try
ShowModal ;
finally
Free;
end.
在FormClose里寫上action := caFree.動態創建窗體用form2:=Tform2.create(application).
釋放action:=cafree.
close,只是關掉窗體 .
free,是釋放內存資源
destroy既關窗體也釋放資源
我理解的不知對不對還請高手進一步說明?
用free就可以,方法和樓上一樣,建議不用destory,用free先找,有就自動釋放。如果是ShowModual 用FreeAndNil(form1). 來釋放資源
Show 用 action := caFree . form1 := nil.
來釋放同意樓上,show,還可以用form1.release, form1:=nil.來釋放。最好在前面加上if form1 ……
附:
表示關閉的方法有如下幾種:
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)) 來判斷該窗體是否已經創建在內存中。
總結
以上是生活随笔為你收集整理的delphi : 窗体的close,free,destroy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将项目发布到neuxs私服
- 下一篇: hash算法和常见的hash函数 [转]