我需要释放TJSONArray的实例吗

时间:2018-08-14 15:02:08

标签: json delphi

答案显然是肯定的,但是我有这段代码已经24/7运行了将近一个月,并且一切都很好。这是代码:

var
  jsonArray : TJSONArray;
  jsonValue : TJSONValue;
  json : string;
begin

  json := 'JSON_MASTER';
  jsonArray := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(json), 0) as TJSONArray;
  for jsonValue in jsonArray do
  begin
    // do the thing 1
  end;

  json := 'JSON_DETAIL';
  jsonArray := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(json), 0) as TJSONArray;
  for jsonValue in jsonArray do
  begin
    // do the thing 2
  end;

end;

该应用程序是Web服务(SOAP)。该功能每天大约执行2K。我知道代码中的问题,但是因为SOAP没有崩溃,所以我还没有解决它。任务管理器性能报告显示正常。没有迹象表明内存使用量正在增加。为什么没有内存泄漏的迹象? TJSONArray中是否有垃圾回收之类的东西?

1 个答案:

答案 0 :(得分:3)

这取决于您在哪个平台上运行。

如果您的应用程序在非ARC平台(例如Windows或OSX)上运行,则为是,则在使用完TJSONArray后,您需要手动释放它们,否则它会泄漏。 / p>

如果您的应用程序在ARC平台(例如iOS,Android或Linux)上运行,则为否,您无需在使用完TJSONArray后手动释放它,因为它会被释放当所有对它的引用都超出范围时,它会自动生成。