Delphi: Это нормально для формы, чтобы освободить себя?

== выполняет контрольную проверку равенства, ссылаясь на то, что 2 объекта (строки в этом случае) относятся к одному и тому же объекту в памяти.

Метод equals() будет проверять, будет ли содержимое или состояния двух объектов одинаковы.

Очевидно, что == работает быстрее, но во многих случаях может (может) давать ложные результаты, если вы просто хотите сказать, имеет ли 2 String s тот же текст.

Определенно рекомендуется использовать метод equals().

Не беспокойтесь о производительности. Некоторые способы поощрения использования String.equals():

  1. Реализация String.equals() сначала проверяет ссылочное равенство (используя ==), и если две строки одинаковы по ссылке, дальнейший расчет Выполняется!
  2. Если 2 ссылки на строки не совпадают, String.equals() будет проверять длину строк. Это также является быстрой операцией, поскольку класс String хранит длину строки, не нужно считать символы или кодовые точки. Если длины отличаются, дальнейшая проверка не выполняется, мы знаем, что они не могут быть равными.
  3. Только если мы доберемся до этого, будет фактически сопоставлено содержимое двух строк, и это будет короткий сравнение: не все символы будут сравниваться, если мы найдем несоответствующий символ (в том же положении в 2 строках), никакие другие символы не будут проверены.

Когда все сказано и даже если у нас есть гарантия, что строки являются стажерами, использование метода equals() все еще не является издержками, которые можно было бы подумать, определенно рекомендуемым способом. Если вам нужна эффективная проверка ссылок, используйте перечисления, где гарантируется спецификацией и реализацией языка, что одно и то же значение перечисления будет одним и тем же объектом (по ссылке).

13
задан Shannon 18 August 2011 в 15:33
поделиться

4 ответа

Кроме того, с формой можно звонить Release.

Это отправляет сообщение CM_RELEASE в форму. Как реакция это называет Свободным. Преимущество выпуска состоит в том, что нет никаких сообщений, уехал в форму, которая могла привести к катастрофическому отказу.

31
ответ дан 1 December 2019 в 17:42
поделиться

Можно сделать форму для освобождения, когда она закрывается пользователем или из кода:

procedure TForm27.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TForm27.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := True;
end;

procedure TForm27.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  Close;
end;

Удостоверьтесь, что Вы предоставляете владельца в конструкторе, упаковывают завершения работы приложения, и форма не уничтожается в то время. Владелец освободит форму прежде, чем освободиться.

17
ответ дан 1 December 2019 в 17:42
поделиться

У меня есть целый комплект объектов, что свободный самих, и я запустил различные тесты на них без показанных проблем/утечек. TForm мог бы быть более сложным, но настолько же долго как Сам. Свободный () выполненный последний вызов, необходимо быть в безопасности.

(Для тех, которые задаются вопросом, с какой стати у меня есть объект что свободный самих; я передаю их вокруг системы много, таким образом, я реализовал собственной схемой подсчета ссылок. Когда последняя ссылка выпущена, таким образом, объект освобождается).

1
ответ дан 1 December 2019 в 17:42
поделиться

Это точно, что сделано с Интерфейсами.

0
ответ дан 1 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: