Цитата:
Есть такая информация, что изредка методы Destroy и Free отрабатывают не совсем корректно
|
Если это не переопределенные кемто методы то отрабатывают они корректно, только дело не в этом.
Вы создаете объект
Код:
frm := TMyTypeForm.Create(<?>);
При этом переменной или свойству
frm присваивается ссылка на созданный объект.
Когда Вы пишите
frm.Free, объект уничтожается и его память освобождается, НО
frm продолжает указывать на то место, где был объект.
Assigned проверяет переменную ( или свойство ) не равно ли оно nil.
Тоже самое делает Free перед вызовом destroy ( поэтому и рекомендуют писать Free а не destroy.
Но чтобы они сработали надо при уничтожении присвоить
frm := nil, что и делает функция
FreeAndNil. Тогда и Assigned и Free будут работать правильно.
Но
FreeAndNil не единственный способ обнуления ссылки при уничтожении оъекта.
Если frm свойство объекта который является наследником от TComponent ( TForm тоже его наследник ) - то можно воспользоваться механизмом нотификации.
Если расскажете по подробнее как и где создается и храниться форма расскажу как сделать.
Код:
procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;
Код:
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;