Delphi "masalah": TForm. Buat () - Nihil, Cukup, atau Aplikasi?

Saat Anda membuat Objek delphi secara dinamis yang mewarisi dari TControl, seperti TForm (mewakili formulir / jendela dalam aplikasi Delphi), konstruktor "Buat" mengharapkan parameter "Pemilik":

constructor Create (AOwner: TComponent);

Parameter AOwner adalah pemilik objek TForm. Pemilik formulir bertanggung jawab untuk membebaskan formulir - yaitu, memori yang dialokasikan oleh formulir - saat diperlukan. Formulir muncul di array Komponen pemiliknya dan dihancurkan secara otomatis ketika pemiliknya dihancurkan.

Anda memiliki tiga pilihan untuk parameter AOwner: Nol, diri, dan aplikasi.

Untuk memahami jawabannya, Anda harus terlebih dahulu mengetahui arti "nihil," "diri" dan "Aplikasi."

  • Nol menetapkan bahwa tidak ada objek yang memiliki formulir dan karenanya pengembang bertanggung jawab untuk membebaskan formulir yang dibuat (dengan memanggil myForm. Gratis ketika Anda tidak lagi memerlukan formulir)
  • Diri menentukan objek di mana metode ini dipanggil. Jika, misalnya, Anda membuat instance baru formulir TMyForm dari dalam penangan OnClick tombol (di mana tombol ini ditempatkan pada MainForm),
    instagram viewer
    diri merujuk ke "MainForm." Jadi, ketika MainForm dibebaskan, itu juga akan membebaskan MyForm.
  • Aplikasi menentukan variabel jenis TApplication global yang dibuat saat Anda menjalankan aplikasi Anda. "Aplikasi" merangkum aplikasi Anda serta menyediakan banyak fungsi yang terjadi di latar belakang program.

Contoh:

  1. Bentuk modal. Saat Anda membuat formulir yang akan ditampilkan secara modern dan dibebaskan ketika pengguna menutup formulir, gunakan "nil" sebagai pemilik:
    var myForm: TMyForm; mulai myForm: = TMyForm. Membuat(nol); coba myForm. ShowModal; akhirnya myForm. Gratis; akhir; akhir;
  2. Bentuk modless. Gunakan "Aplikasi" sebagai pemilik:
    var
    myForm: TMyForm;
    ...
    myForm: = TMyForm. Buat (Aplikasi);

Sekarang, ketika Anda menghentikan (keluar) aplikasi, objek "Aplikasi" akan membebaskan instance "myForm".

Mengapa dan kapan TMyForm. Buat (Aplikasi) TIDAK disarankan? Jika formulir adalah bentuk modal dan akan dihancurkan, Anda harus memberikan "nihil" untuk pemiliknya.

Anda dapat melewati "aplikasi," tetapi penundaan waktu yang disebabkan oleh metode pemberitahuan yang dikirim ke setiap komponen dan formulir yang dimiliki atau dimiliki secara tidak langsung oleh Aplikasi dapat terbukti mengganggu. Jika aplikasi Anda terdiri dari banyak formulir dengan banyak komponen (dalam ribuan), dan formulir yang Anda buat memiliki banyak kontrol (dalam ratusan), penundaan pemberitahuan bisa jadi signifikan.

Melewati "nil" sebagai pemilik alih-alih "aplikasi" akan menyebabkan formulir lebih cepat muncul, dan tidak akan memengaruhi kode.

Namun, jika formulir yang Anda butuhkan bukan modal dan tidak dibuat dari formulir utama aplikasi, maka ketika Anda menentukan "diri" sebagai pemilik, menutup pemilik akan membebaskan formulir yang dibuat. Gunakan "diri" ketika Anda tidak ingin formulir hidup lebih lama dari penciptanya.

Peringatan: Untuk secara instantiate komponen Delphi dan secara eksplisit membebaskannya nanti, selalu berikan "nil" sebagai pemiliknya. Kegagalan untuk melakukannya dapat menimbulkan risiko yang tidak perlu, serta masalah kinerja dan pemeliharaan kode.

Di Aplikasi SDI, ketika pengguna menutup formulir (dengan mengklik tombol [x]) formulir tersebut masih ada di memori - hanya disembunyikan. Dalam aplikasi MDI, menutup formulir anak MDI hanya menguranginya.
Itu OnClose acara menyediakan Tindakan parameter (dari tipe TCloseAction) yang dapat Anda gunakan untuk menentukan apa yang terjadi ketika pengguna mencoba untuk menutup formulir. Mengatur parameter ini ke "caFree" akan membebaskan formulir.

Navigator kiat Delphi:
»Dapatkan HTML lengkap dari komponen TWebBrowser
«Cara Mengonversi Piksel ke Milimeter

instagram story viewer