zoukankan      html  css  js  c++  java
  • FMX对象释放

    今天盒子中有朋友遇到对象释放的问题,原文在这里,他的实现大意是建立一个TmyLayout = class(TLayout),然后在这个类中画线,Form对象调用实例化这个类来画线,然后释放掉这个对象,问题就出在释放。我们看一下他建立这个对象与释放的代码:
    procedure TForm1.Button1Click(Sender: TObject);
    var i: Integer;
    begin
         ly := TmyLayout.Create(Self);
         ly.Parent := Form1; // Self;

         for I := 0 to 9 do
         begin
              ly.DrawLine(PointF(0, 0   i * 10));
         end;
    end;
    这里,ly他声明为全局对象。
    procedure TForm1.Button2Click(Sender: TObject);
    begin
         ly.Parent := Nil;
         ly.Destroy;
    end;
    这是他释放ly对象的代码,注意,他用了Destory方法。正是这种方法,当在android及ios下运行时,不能正常执行。
    回想在xe5/6时,关于Form对象的释放,记得就用DisposeOf方法。于是做了如下的测试:

    把ly.Destory改成ly.DisposeOf,循环建立与释放对象ly10000次,内存占用正常,改成FreeAndNil(ly),内存占用不正常,达到900多MB,这说明,FreeAndNil不能正确释放内存。

    好了,现在结论:用fmx做跨平台应用,用DisposeOf来释放对象。

    实际上,XE7的时候就写过关于DisposeOf的文字,你可以去看看.

    http://blog.sina.com.cn/s/blog_44fa172f0102vyw9.html

  • 相关阅读:
    [LeetCode]Linked List Cycle
    ACM 整数划分(四)
    ACM 子串和
    ACM 阶乘之和
    ACM 组合数
    ACM 阶乘的0
    ACM 比大小
    ACM 擅长排列的小明
    ACM 重建二叉树
    cocos2dx 魔塔项目总结(一)
  • 原文地址:https://www.cnblogs.com/findumars/p/5405140.html
Copyright © 2011-2022 走看看