delphi : 窗体的close,free,destroy
一、我用application.create(TForm2,Form2)語句,創(chuàng)建了Form2,可是調(diào)用了Form2.close后,重新調(diào)用Form2.show. 剛才所創(chuàng)建的Form2仍然存在。問為了節(jié)約資源,應(yīng)該怎樣使用close,free,destroy. 三者的關(guān)系是什么?
1、Action:=caFree。
2、 with TForm1.Create(Application) do
Try
ShowModal ;
finally
Free;
end.
在FormClose里寫上action := caFree.動態(tài)創(chuàng)建窗體用form2:=Tform2.create(application).
釋放action:=cafree.
close,只是關(guān)掉窗體 .
free,是釋放內(nèi)存資源
destroy既關(guān)窗體也釋放資源
我理解的不知對不對還請高手進(jìn)一步說明?
用free就可以,方法和樓上一樣,建議不用destory,用free先找,有就自動釋放。如果是ShowModual 用FreeAndNil(form1). 來釋放資源
Show 用 action := caFree . form1 := nil.
來釋放同意樓上,show,還可以用form1.release, form1:=nil.來釋放。最好在前面加上if form1 ……
附:
表示關(guān)閉的方法有如下幾種:
Hide
Close
Free
Release
Destroy
Terminate
FreeAndNil()
Halt
Free:先對象判斷不為空再destroy。釋放對象,對于窗體來說,只會釋放對象,而不將窗體對象的指針指向nil,所以free后用assigned函數(shù)來判斷還是返回true,只有freeandnil或free后再將指針指向nil。
Destroy:不判斷對象是否為空直接釋放。如果對象已經(jīng)釋放的話會報錯。用destroy不安全,可以說free是對destroy的封裝和改進(jìn);
Terminate:Application對象的方法,終止整個應(yīng)用程序,對于控制臺程序,必須用halt代替。
Hide:只是將窗體做隱藏處理。
Close:對于窗體而言,close與hide的區(qū)別是如果窗體內(nèi)有方法執(zhí)行,close會終止窗體對象所執(zhí)行的方法.而hide不會釋放窗體及其所有的對象,更不會使指針指向nil。
Halt:終止整個應(yīng)用程序。
FreeAndNil (): 釋放對象并把指針指向nil,比較的安全且效率會高些,能提高內(nèi)存的利用率。
Release:調(diào)用這個方法時會觸發(fā)free 事件。Release可以在onshow的事件中調(diào)用而free不可以。Release等待資源不再使用后釋放資源,同樣不修改form指針為nil,所以最好使用release進(jìn)行資源釋放操作。
在對窗體操作時,單純通過assigned(form1)判斷窗體是否已經(jīng)創(chuàng)建是不夠的,因為如果窗體通過free /release進(jìn)行資源釋放的話,form1指向的是一個未知地址,而非nil,所以需要用(not Assigned(ShowForm)) and (not (ShowForm is TForm2)) 來判斷該窗體是否已經(jīng)創(chuàng)建在內(nèi)存中。
總結(jié)
以上是生活随笔為你收集整理的delphi : 窗体的close,free,destroy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将项目发布到neuxs私服
- 下一篇: hash算法和常见的hash函数 [转]