Wie schon erwähnt, inherited ist an der Stelle nicht wirklich wichtig, aber ich erkenne daran immer ganz schnelle die Konstruktoren und Destruktoren.
Delphi-Quellcode:
constructor TJsonObject.Create;
begin
inherited;
FKeys := TStringArray.Create;
FValues := TJsonValues.Create;
end;
destructor TJsonObject.Destroy;
begin
FValues.Free;
FKeys.Free;
inherited;
end;
Ich muss zugeben, dass ich gerade erst aufgestanden bin und erst meinen Kaffee trinke. Was wird hier noch mal gemacht?
Delphi-Quellcode:
procedure TJsonObject.Parse(AJsonText: string);
...
begin
...
AddValue(CurrentKey, TJsonValue.Create); //<<<<<<<<<<<<<<<<<<<<<<<
Ich will nicht behaupten, dass das etwas ist, ich kenne nur diese Technik nicht. Die geibt es hier noch mal:
Delphi-Quellcode:
procedure TJsonValue.GetValue(var AOutput: TJsonArray);
...
begin
...
LJsonArray.Add(TJsonValue.Create); //<<<<<<<<<<<<<<<<<<
Dann hier noch was:
Delphi-Quellcode:
procedure TJsonValue.GetValue(var AOutput: TJsonArray);
...
begin
...
LJsonArray := TJsonArray.Create; //<<<<<<<<<<<<<<<<<<<<<<<<<
Ich hab mir angewöhnt immer mit
try finally
zu arbeiten. Erstelle ich ein Objekt, ist die nächste Zeile ein
try
. Der Rest ergibt sich dann automatisch. Vergesse ich
finally
, gibt es Krach. Schreibe ich es, gebe ich auch alles wieder frei.
Hier gibst du etwas ein. Gibst du es wieder frei?
Delphi-Quellcode:
procedure TJsonArray.Add(AJsonValue: TJsonValue);
begin
SetLength(FValues, Count+1);
FValues[Count-1] := AJsonValue;
end;
procedure TJsonArray.Clear;
begin
end;
Wie gesagt, das auf die Schnelle ohne den Code genauer zu studieren.