Kann ich das IntfClear am Ende einer Methode vorziehen?
Nein.
Internen Temp-Variablen kannst du nicht freigeben, da du nicht an deren Variablen ran kommst.
Einzige Lösungen:
- vermeiden solcher Variablen, also alle Rückgabewerte immer in Variablen ... das gilt auch für Zwischenschritte, wo soein Interface entstehen könnte.
In deinem Fall wäre es das Result vom xmlDoc.DocumentElement im xmlDoc.DocumentElement.AddChild('someChildNode');
- den Code in einen extra Bereich verschieben, bei dessen Ende alles aus dessen Scope freigegeben wird
- nichts in initialization/finalization, was ein Interface/DynArray/String/Vatiant/... zurück gibt
Keine Aufrufketten (maximal 1 Punkt pro Ausdruck, abgesehn von Namespaces) und alle Results selbst behandeln.
Delphi-Quellcode:
CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
try
xmlDoc := LoadXMLData('<rootNode />');
xmlRoot := xmlDoc.DocumentElement;
xmlNode := xmlRoot.AddChild('someChildNode');
xmlNode := nil; xmlRoot := nil; xmlDoc := nil;
finally
CoUninitialize;
end;
Delphi-Quellcode:
{procedure doXmlStuff;
var
xmlDoc: IXMLDocument;
begin
xmlDoc := LoadXMLData('<rootNode />');
xmlDoc.DocumentElement.AddChild('someChildNode');
//xmlDoc := nil;
end;}
procedure doXmlStuff;
begin
LoadXMLData('<rootNode />').DocumentElement.AddChild('someChildNode');
end; // hier alles automatisch weg
procedure myProc;
begin
CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
try
doXMLStuff;
finally
CoUninitialize;
end;
end;