Я хочу знать, как правильно управлять памятью, когда у меня есть TObjectDictionary в Delphi.
Я хочу создать один ObjectDictionary из TShapes, чтобы рисовать круги в Timage, но положение и количествокруги меняют каждую клеточку.
Я не хочу утечек памяти. В закрытой форме я буду делать FShapes.Free, но я не уверен, что каждый раз, когда я делаю FShapes.Clear, что происходит с памятью.
Я прочитал, что я должен сделать это на OnValueNotify, ноЯ не уверен, как это сделать.
private
FShapes: TObjectDictionary<Integer, TShape>;
procedure TFRemote_Layout.FormCreate(Sender: TObject);
begin
FShapes := TObjectDictionary<Integer, TShape>.Create([doOwnsValues]);
FShapes.OnValueNotify := VNotify;
end;
procedure TFRemote_Layout.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FShapes.Free;
end;
procedure TFRemote_Layout.InsertShape(i, x, y: Integer);
var
AShape: TShape;
begin
try
AShape := TShape.Create(nil);
AShape.Top := x;
AShape.Left := y;
FShapes.Add(i, AShape);
finally
//Free AShape??
end;
end;
procedure TFRemote_Layout.ClearDictionary();
begin
FShapes.Clear; //This clear frees all the memory for the next cycle?
end;
//I was reading in embarcadero something like this, but not sure
procedure TFRemote_Layout.VNotify(Sender: TObject; const Item: TShape; Action: TCollectionNotification);
begin
Item.Free;
end;