Windows 10中的内存泄漏和Delphi Seattle中的TNotification?

8

我正在实现我的应用程序中的Windows 10通知。 然而,下面的代码(可以正常运行)似乎会导致1个TNotification对象和2个字符串的内存泄漏,尽管我在块的末尾释放了该对象:

aNotification := NotificationCenter.CreateNotification;

//-- If not assigned then must be Win 8.1 or below
if not assigned(aNotification) then
  exit;

try
  aNotification.Title := AlignMixVersionName + ' License';
  aNotification.AlertBody := aText;

  NotificationCenter.PresentNotification(aNotification);

finally
  aNotification.Free;
end;

我是否做了一些愚蠢的事情或者实现通知功能的代码中存在内存泄漏?

  • Steve

NotificationCenter.PresentNotification(aNotification) 之后,aNotification 的值是多少? - Hugh Jones
@HughJones 在PresentNotification之后,aNotification仍然被赋值 - 太奇怪了。 - Steve Maughan
我很久以前做过Delphi,记得将一些东西设置为nil... aNotification := nil; - KornMuffin
在RAD Studio的问题跟踪器中开了一个关于这个内存泄漏的问题:https://quality.embarcadero.com/browse/RSP-17660 - Joachim Marder
1个回答

8

这是由TNotificationCenterDelegateActivated引起的洩漏。在其Create函数中创建了一个TNotification参数的副本,但从未释放。

看起来,一些负责此代码的开发人员对非 ARC 环境不太熟悉。


感谢确认。 - Steve Maughan
3
天真的人可能会期望Emba为他们的库编写测试以检测泄漏。这有多难呢? - David Heffernan
2
@DavidHeffernan 一开始可能会认为他们有一个简单的应用程序进行测试,而第一行编写的代码是 ReportMemoryLeaksOnShutdown := true; - Sir Rufo
@UweRaabe - 这是否意味着我们几乎没有希望得到积极的结果? - Hugh Jones
1
@Hugh 不,这与垃圾回收不同。 - David Heffernan
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接