Делпхи "проблем": ТФорм. Креирајте () - Нил, Селф или Апплицатион?

Када креирате Делпхи објекти динамички који насљеђују од ТЦонтрол-а, као што је ТФорм (представља облик / прозор у Делпхи апликацијама), конструктор "Цреате" очекује параметар "Овнер":

конструктор Цреате (АОвнер: ТЦомпонент);

Параметар АОвнер власник је објекта ТФорм. Власник обрасца одговоран је за ослобађање обрасца - тј. Меморије додељене обрасцем - када је то потребно. Образац се појављује у низу компоненти његовог власника и аутоматски се уништава када се његов власник уништи.

За параметар АОвнер постоје три избора: Нула, ја, и апликација.

Да бисте разумели одговор, прво морате да знате значење „нула“, „ја“ и „апликација“.

  • Нула одређује да ниједан објекат не посједује образац и зато је програмер одговоран за ослобађање креираног обрасца (позивом на мојФорм. Бесплатно кад вам више не треба образац)
  • Ја одређује објект у који се зове метода. Ако, на пример, креирате нову инстанцу обрасца ТМиФорм из онЦлицк обрађивача дугмета (где је ово дугме смештено на МаинФорм), ја се односи на "МаинФорм." Дакле, када се МаинФорм ослободи, он ће такође ослободити МиФорм.
  • instagram viewer
  • Апликација одређује глобалну променљиву врсту ТАпплицатион-а креирану када покренете апликацију. "Апликација" обједињује вашу апликацију као и пружа бројне функције које се појављују у позадини програма.

Примери:

  1. Модални облици. Када креирате образац за модални приказ и ослобађање када корисник затвори образац, користите "нил" као власник:
    вар миФорм: ТМиФорм; старт миФорм: = ТМиФорм. Креирај(нула); пробај моју форму. СховМодал; коначно моја форма. Бесплатно; крај; крај;
  2. Модени облици. Користите "Апликацију" као власника:
    вар
    миФорм: ТМиФорм;
    ...
    миФорм: = ТМиФорм. Креирајте (апликација);

Сада, када затворите (затворите) апликацију, објекат "Апплицатион" ослободиће инстанцу "миФорм".

Зашто и када је ТМиФорм. Креирање (апликација) НЕ препоручује се? Ако је образац модални облик и биће уништен, требало би да прођете "нил" за власника.

Можете прослиједити "апликацију", али временско кашњење узроковано начином нотификације који се шаље свим компонентама и обрасцу који је у власништву или посредно у власништву апликације може се показати мотећим. Ако се ваша пријава састоји од многих образаца са многим компонентама (у хиљадама), а образац који креирате има много контрола (у стотинама), одлагање обавештења може бити значајно.

Ако прођете "нил" као власника уместо "апликације", образац ће се појавити пре, а на други начин неће утицати на код.

Међутим, ако образац који требате створити није модални и није креиран из главног обрасца апликације, тада када као власника наведете "селф", затварање власника ће ослободити креирани образац. Користите "себство" када не желите да образац наџиви његовог творца.

Упозорење: Да бисте динамички инстанцирали Делпхи компоненту и изричито је ослободили нешто касније, увек додајте „нил“ као власнику. Ако то не учините, можете увести непотребан ризик, као и проблеме са перформансама и одржавањем кода.

Ин СДИ апликације, када корисник затвори образац (кликом на дугме [к]), образац и даље постоји у меморији - он се само скрива. У МДИ апликацијама, затварање МДИ форме за дете само га минимизира.
Тхе ОнЦлосе догађај пружа поступак параметар (типа ТЦлосеАцтион) који можете користити да одредите шта се дешава када корисник покуша затворити образац. Постављање овог параметра на „цаФрее“ ослободиће образац.

Навигацијски савјети за Делпхи:
»Добијте цео ХТМЛ из компоненте ТВебБровсер
«Како претворити пикселе у милиметре

instagram story viewer