エキスパートデルファイの本を読む私は理解できない何かを発見しました。これまでのところは良いデルファイのインターフェイスが参照カウントされていません
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;
が、彼はのdidnをことに注意してください。そして、彼はDataModule
を使用して、このように上記のインターフェイスを実装することを決定した
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;
:著者はこのコードのユニットを作成しました'tを入力してください。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;
これはメモリリークを引き起こしませんか?少なくとも窓に。私はデルファイの新人だから失敗するかもしれないが、AndroidとIOにはARCがあるのでオンラインで読んでいるので、心配する必要はありません。
WindowsにはARCがありませんので、TInterfacedObject(ここにはありません)などの実装がない限り、try ...を使用する必要があります。それは間違いですか?
このアプリは、あなたのメモを書き込む/読む/保存するToDoアプリに関するものです。データモジュールにはFireDACアクセスコンポーネントがあり、インターフェイスメソッドはdbにアクセスするために使用されます。これは、UIとDBの内容を分離するためです。
です。何か言いたいことは、それはマドリッドの恐ろしい天気です:) – Victoria
@Victoria same here slad;) –