Читая книгу Expert Delphi, я нашел кое-что, чего не могу понять. Автор создал блок с таким кодом:
IToDoData = interface //CRUD
function ToDoCreate(aValue: TToDo): integer;
function ToDoRead(id: integer; out aValue: TToDo): boolean;
function ToDoUpdate(aValue: TToDo): boolean;
function ToDoDelete(id: integer): boolean;
procedure ToDoList(aList: TToDos);
end;
Затем он решил использовать DataModule
и реализовать описанный выше интерфейс следующим образом:
type
TDMToDo = class(TDataModule, IToDoData)
// ... other code ...
public
// IToDoData
function ToDoCreate(aValue: TToDo): integer;
function ToDoRead(id: integer; out aValue: TToDo): boolean;
function ToDoUpdate(aValue: TToDo): boolean;
function ToDoDelete(id: integer): boolean;
procedure ToDoList(aList: TToDos);
end;
Пока все хорошо, но обратите внимание, что он не поставил TInterfacedObject
, поэтому здесь у нас нет таких методов, как AddRef и так далее. Я предполагаю, что приведенный выше код в порядке, но он должен быть включен в блок try... finally.
В основной форме (конечно, модуль модуля данных — это разделы использования) есть такая функция:
function TFormToDo.GetToDoData: IToDoData;
begin
if DMToDo = nil then
DMToDo := TDMToDo.Create(Application);
Result := DMToDo;
end;
Приведенный выше код позволяет написать такой код:
begin
GetToDoData.ToDoList(FToDos);
ListView1.BeginUpdate;
try
//populate the list
finally
ListView1.EndUpdate;
end;
end;
Не вызывает ли это утечку памяти? По крайней мере на окнах. Я новичок в delphi, поэтому я могу потерпеть неудачу, но я читал в Интернете, что Android и IOs имеют ARC, поэтому не нужно беспокоиться о попытке, наконец.
В Windows НЕТ ARC, поэтому я должен использовать попытку .. наконец, если нет такой реализации, как TInterfacedObject (здесь ее нет). Так это ошибка?
Приложение представляет собой приложение ToDo, в котором вы пишете/читаете/сохраняете свои заметки. Модуль данных имеет компоненты доступа FireDAC, а методы интерфейса используются для доступа к db. Это сделано для того, чтобы сохранить разделение между пользовательским интерфейсом и базой данных.