FMX对象释放
2016-04-18 17:09
218 查看
今天盒子中有朋友遇到对象释放的问题,原文在这里,他的实现大意是建立一个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
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
相关文章推荐
- VisualVM连接远程Java进程
- 24点游戏算法
- java学习笔记(一)
- C#学习笔记二 引用参数和值参数
- 挺好的 过程里面有些可取之处
- SharedPreferences
- 新绑定业务修改点
- Android面试及使用技术点总结
- 应用ModelState和Data Annotation做服务器端数据验证
- C-IDE使用帮助
- MapReduce计算框架
- Android插件化框架研究-DroidPlugin
- createrepo
- Android Studio 如何打JAR包
- recyclerview显示的宽度只有屏幕的一部分
- 对DllRegisterServer的调用失败,错误代码为0x8007005的解决办法,注册控件
- java学习 集合之LinkedList
- 简单的留言板
- Masonry示例Examples使用cocoapods命令pod install之后报错处理
- Android中程序与Service交互的方式——交互方式