LEO原创13498714

FMX加入了ARC技术,对象创建后不用释放,FMX会帮你释放,是不是这样就不用关心对象的释放了呢,非也!

写简单的代码,这个功能也许很好用,但如果你写的是一个项目,那隐藏的坑无形中大大的增加开发难度,

开发人员需要更加小心注意对象的释放问题:你原来正常运作的代码,在FMX下,极有可能运作不正确,灵异现象熊出落。

原因很简单:对象的释放和你想象的不一样。怎么个不一样,(关于ARC)仔细看他Object类,就能窍的一二,这一二容我细细道来:

之前我们写代码,关系对象引用的清除以及释放一般都是在Detory事件中处理,所以代码是

obj:TObject.Create; obj.Free;  Free中调用了Destory

如果使用接口Interface, 由于引用计数关系,引用计数FRefCount值为0时,编译器帮我们释放了对象(最终调用了Desotry)

某个Firemonkey设计者,在设计ARC时,大胆简单的使用了接口相同的技术(引用计数),所以释放的原理和原来的接口一样。但原来的Free代码和引用计数的这个设计是矛盾的,所以高明的设计者在FMX中,直接加上了一个补丁:如果使用了ARC,Free函数啥都不作。

LEO原创13498714

这是一个简单的设计,同时这也是一个恶心的设计,这设计最大的危害:以前的代码直接就有了接口的原罪与缺点:对象相互引用时(你中有我,我中有心),一不小心对象的Desotry就得不到调用(因为二者的引用计数都无法顺序归0)。原来写的无害代码,极有可能会出现对象得不到释放。得不到释放会引来很多问题,因为不严谨,对象还可以接收处理,如果是窗体得不到释放,可能还在后面做着啥(这也是FMXApp容易闪退的一个常见原因)

这个时候,我大胆猜测,这个伟大的设计人员见招拆招,想出增加一个DisposeOf方法出来,你不是无法正常释放吗,好吧,把这个事分成二部分来看,一个对象的销毁Desotry,一个是对象内存的释放(FreeInstance),完美!打个补丁,就可以解决你原来的问题,你原来写的代码,写成obj:TObject.Create; obj.DisposeOf;就可以和原来效果基本一样了,为什么说是基本一样呢,至少你的Desotry函数能被顺利调用,不一样的地方就是,有可能这块内存得不到释放而已(Destory后,对象引用计数还是很容易不为0的)

好了,分析完ARC的前因后果之后,我们在写FMX代码的时候,就容易多了,至少知道坑在那里,下一章,我将总结出开发细节规范,只供参考. 如果有问题可以找13498714讨论。
---------------------
作者:Im_Leo
来源:CSDN
原文:https://blog.csdn.net/wingleo/article/details/88842590
版权声明:本文为博主原创文章,转载请附上博文链接!

LEO原创-FMX之你不知道的ARC的更多相关文章

  1. 讲讲你不知道的 ARC (一)

    来源:伯乐在线 - 酷酷的哀殿 链接:http://ios.jobbole.com/89420/ 点击 → 申请加入伯乐在线专栏作者 内容提要 通过阅读本篇文章,希望您能了解:如何在 ARC 下,强制 ...

  2. 或许你不知道的10条SQL技巧(转自58沈剑原创)

    这几天在写索引,想到一些有意思的TIPS,希望大家有收获. 一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and s ...

  3. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数016,xld,xld轮廓

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数016,xld,xld轮廓 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“ ...

  4. 【Bugly干货分享】iOS内存管理:从MRC到ARC实践

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 对于iOS程序员来说,内存管理是入门的 ...

  5. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数012,polygon,多边形

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数012,polygon,多边形 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换 ...

  6. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数003·contour,轮廓处理

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数003·contour,轮廓处理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替 ...

  7. ios5之后arc的问题

    原创: 自从ios5以后, apple官方引进了ARC (automaically reference count 自动索引计数) 这个新特性, 简单的说就是对象设置为nil(空引用)之后, 当自动索 ...

  8. iOS开发中 在MRC中让某些类使用ARC编译 或者相反

    如果你的工程是MRC 想让某些类使用ARC进行编译的话 那么需要在Build Phases中Complile Sourse 把该类后面 写上如下命令:-fobjc-arc  反之 写上如下命令:-fn ...

  9. 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版

    <zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...

随机推荐

  1. 教程:Spagobi开源BI系统 Console报表设计教程

    Console Designer 1 Console Designer Console Designer 1.1 Introduction 1.2 Dataset Tab 1.3 Summary Pa ...

  2. 说说自己对RESTful API的理解

    REST不是英文上的rest单词,其英文缩写为presentational State Transfer ,直译为表现状态转移,咋看起来很学术,不懂,其实不用去死抠这个词的意思.REST是一种约束和架 ...

  3. 二叉树转换成森林&amp;森林变成二叉树

    一,树转换成二叉树 1,将全部兄弟结点连起来; 2,保留第一个兄弟结点与父节点的连接,断开其它兄弟结点与父节点的连接,然后以根节点为轴依照顺时针方向旋转45度 watermark/2/text/aHR ...

  4. ABBYY FineReader Pro for Mac有哪些特性(下)

    使用ABBYY FineReader Pro for Mac轻松转换纸质文档.PDF文件和数字文本照片为可编辑和可搜索的文件,再也不需要手动重新输入或格式化了,相反,可以编辑.搜索.共享.归档和复制文 ...

  5. PHP文件解密服务,微擎微赞模块解密,微擎模块解密

    支持Zend/PHP5.3, Zend/PHP5.4, Zend/PHP5.5, Zend/PHP5.6解密 支持IonCube8, IonCube9, IonCube10解密 支持魔方一代,魔方二代 ...

  6. 【hive】 hive 加载数据

    1. insert 插入数据 要保证启动了jobhistory 否则会抛出异常 hdfs中查看内容 2. create table 表名字 select 字段... from  表名 hdfs查看数据 ...

  7. linux 几个命令

    tail: tail -20 xxx  --查看xxx文件的最后20行 more:分页查看,只能向后,不能向前 less:查看文件,可向前,向后,用的比较多 ll -h|more:当文件较多时,可以通 ...

  8. jenkins实战(二):构建自由风格的maven项目

    本系列打算全面介绍jenkins的常规使用,这是第二篇,之前的文章在: jenkins实战(一):war安装及插件安装 一.新建项目 1.新建项目 此处我们打算新建自由风格项目,见下图. 值得注意的是 ...

  9. WinForm资源管理器开发(TreeView&ListView)

    在C# WinForm开发当中,有三大View控件值得深入应用,分别为DataGridView.ListView.TreeView.如果这三大控件能够熟练的应用,其它的控件也就基本没有问题.所以这篇博 ...

  10. Spring MVC Redis 整合笔记

    extends:http://blog.csdn.net/defonds/article/details/48716161, http://blog.csdn.net/java2000_wl/arti ...