När du skapar Delphi-objekt dynamiskt som ärver från TControl, till exempel en TForm (som representerar ett formulär / fönster i Delphi-applikationer), förväntar konstruktören "Skapa" en "Ägare" -parameter:
konstruktör Skapa (AOwner: TComponent);
Parametern AOwner äger TForm-objektet. Ägaren av formuläret ansvarar för att frigöra formuläret - dvs. minnet som tilldelats av formuläret - vid behov. Formuläret visas i komponentgruppen för dess ägare och det förstörs automatiskt när dess ägare förstörs.
Du har tre alternativ för AOwner-parametern: Noll, själv, och Ansökan.
För att förstå svaret måste du först veta betydelsen av "noll", "jag" och "Tillämpning."
Exempel:
var myForm: TMyForm; börja myForm: = TMyForm.Create (noll); prova myForm.ShowModal; slutligen myForm.Free; slutet; slutet;
När du avslutar (avslutar) applikationen kommer objektet "Application" att frigöra instansen "myForm".
Varför och när rekommenderas INTE TMyForm.Create (Application)? Om formuläret är en modal form och kommer att förstöras, ska du skicka "noll" för ägaren.
Du kan passera "ansökan", men tidsförseningen som orsakas av att anmälningsmetoden skickas till varje komponent och form som ägs eller indirekt ägs av applikationen kan visa sig vara störande. Om din ansökan består av många formulär med många komponenter (i tusentals), och det formulär du skapar har många kontroller (i hundratals), kan anmälningsförseningen vara betydande.
Att skicka "noll" som ägare istället för "ansökan" kommer att få formuläret att visas förr och påverkar inte koden på annat sätt.
Men om formuläret du behöver skapa inte är modalt och inte skapas från programmets huvudformulär, när du anger "själv" som ägare, kommer ägarens stängning att frigöra det skapade formuläret. Använd "jag" när du inte vill att formen ska överleva sin skapare.
Varning: För att dynamiskt instansera en Delphi-komponent och uttryckligen frigöra den någon gång senare, passera alltid "nil" som ägare. Om du inte gör det kan det orsaka onödiga risker samt problem med prestanda och kodunderhåll.
I SDI-applikationer, när en användare stänger formuläret (genom att klicka på [x] -knappen) finns formen fortfarande i minnet - det gömmer sig bara. I MDI-applikationer minimerar det bara att stänga en MDI-underform.
De OnClose evenemang ger en Verkan parameter (av typen TCloseAction) som du kan använda för att specificera vad som händer när en användare försöker stänga formuläret. Om du ställer in denna parameter till "caFree" kommer formen att frigöras.
Delphi tipsnavigator:
"Hämta full HTML från TWebBrowser-komponenten
"Hur konverterar jag pixlar till millimeter