当前位置:  开发笔记 > 编程语言 > 正文

VirtualTreeView是否为节点的用户数据管理内存,或者我可以吗?

如何解决《VirtualTreeView是否为节点的用户数据管理内存,或者我可以吗?》经验,为你挑选了1个好方法。

我开始玩VirtualTreeView,似乎从所有的Web信息和文档中,VirtualTreeView管理用户提供的数据的内存(如果有的话,记录).一个人没有New()和Dispose()任何用户数据.只需要告诉VirtualTreeView userdata的大小,并在调用GetNodeData后分配其字段值.

如果我想管理它怎么办?可以吗?我可以根据需要创建用户数据并将其添加到我自己的列表中,并且只向VirtualTreeView提供每条记录的指针而不会干扰它吗?



1> ain..:

只需要告诉VirtualTreeView userdata的大小,并在调用GetNodeData后分配其字段值

这并不完全正确 - 如果用户数据记录包含需要它的数据类型,也必须注意最终确定用户数据记录 - 即引用计数类型,如字符串和接口.这是在OnFreeNode事件中完成的.所以如果你的数据记录包含字符串

type
  TMyNodeData = record
    Foo: string;
  end;

然后你必须在释放节点的数据时为其分配空字符串:

procedure TForm1.VT_FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var ND: PMyNodeData;
begin
  ND := Sender.GetNodeData(Node);
  if(ND <> nil)then begin
     ND.Foo := '';
  end;
end;

否则你会泄漏那个字符串.

自己管理内存的最简单方法是根本不使用VT的用户数据记录,或者只有指向其中某些其他数据结构的指针.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有