Kui loote Delphi objektid dünaamiliselt mis pärivad TControlilt, näiteks TForm (esindab vormi / akent Delphi rakendustes), ootab konstruktor "Loo" parameetrit "Omanik":
konstruktor Loo (Omanik: TComponent);
Parameeter AOwner on objekti TForm omanik. Vormi omaniku ülesandeks on vajaduse korral vormi - st vormi eraldatud mälu - vabastamine. Vorm ilmub selle omaniku massiivi komponentide massiivi ja see hävitatakse selle omaniku hävitamisel automaatselt.
Parameetri AOwner jaoks on teil kolm valikut: Null, ise, ja rakendus.
Vastuse mõistmiseks peate kõigepealt teadma sõnade "null", "ise" ja "rakendus" tähendust.
- Null täpsustab, et ükski objekt ei oma vormi ja seetõttu vastutab arendaja loodud vormi vabastamise eest (helistades myForm.) Tasuta, kui te enam vormi ei vaja)
- Ise määrab objekti, milles meetodit kutsutakse. Kui loote näiteks nupu OnClicki käitlejast (kus see nupp on MainFormis), sisestage uus TMyFormi vormi eksemplar, ise viitab "MainForm". Seega, kui MainForm vabastatakse, vabastab see ka MyFormi.
- Rakendus määrab rakenduse käitamisel loodud globaalse TA-rakenduse tüübi muutuja. Rakendus kapseldab teie rakenduse ja pakub palju funktsioone, mis esinevad programmi taustal.
Näited:
- Modaalsed vormid. Kui loote vormi, mida kuvatakse modaalselt ja vabastatakse vormi sulgemisel, kasutage selle omanikuna null:
var myForm: TMyForm; alusta myForm: = TMyForm. Loo (null); proovige myFormi. ShowModal; lõpuks myForm. Tasuta; lõpp; lõpp;
- Tagasihoidlikud vormid. Kasuta omanikuna rakendust:
var
myForm: TMyForm;
...
myForm: = TMyForm. Loo (rakendus);
Kui te rakenduse lõpetate (väljume), vabastab objekt "Application" objekti "myForm".
Miks ja millal on TMyForm. Loo (rakendus) EI ole soovitatav? Kui vorm on modaalne vorm ja see hävitatakse, peaksite omanikule andma "nulli".
Võite rakenduse läbida, kuid viivitus, mille põhjustab teavitusmeetodi saatmine igale rakenduse omandis või kaudselt kuuluvale komponendile ja vormile, võib osutuda häirivaks. Kui teie rakendus koosneb paljudest vormidest, millel on palju komponente (tuhandetes), ja teie loodud vormil on palju juhtelemente (sadades), võib teatise edasilükkamine olla märkimisväärne.
"Rakenduse" asemel omaniku "null" edastamine kuvatakse vorm varem ja see ei mõjuta koodi teisiti.
Kui aga loodav vorm ei ole modaalne ja seda ei loota rakenduse põhivormist, siis kui määrate omanikuks "ise", vabastab omaniku sulgemine loodud vormi. Kasutage "ise", kui te ei soovi, et vorm ületaks selle looja.
Hoiatus: Delphi komponendi dünaamiliseks kiirendamiseks ja millalgi selle selgesõnaliseks vabastamiseks läbige omanikuna alati null. Selle tegemata jätmine võib tekitada tarbetuid riske, samuti toimivuse ja koodi hooldamise probleeme.
Sisse SDI rakendused, kui kasutaja vormi sulgeb (klõpsates nuppu [x]), on vorm endiselt mälus - see ainult peidetakse. MDI-rakenduste puhul minimeerib MDI-alamvormi sulgemine seda.
OnClose üritus pakub Tegevus parameetri (tüübi TCloseAction) abil saate täpsustada, mis juhtub, kui kasutaja üritab vormi sulgeda. Selle parameetri seadmine väärtusele "caFree" vabastab vormi.
Delphi näpunäidete navigaator:
»Hankige täielik HTML TWebBrowser-komponendist
«Kuidas teisendada piksleid millimeetriteks