Free是指一个对象的释放,作为任何对象都存在这个非虚拟的方法,实际上它调用销毁器
Destroy,而销毁器是可以Override的,
Release并非所有的对象都存在这个方法,实际上只有TCustomForm和某些Win32对象具有此
方法,在TCustomForm的代码里,Release方法只有一句PostMessage(Handle, CM_RELEASE, 0, 0);
注意是PostMessage,而不是SendMessage,也就是说只将CM_Release消息放入消息循环队列,
然后立即返回,只有其他消息处理完毕后此消息才会处理,这样也可以理解Help里关于Release
方法的说明了,而Form的默认消息处理器对于CM_Release的处理也只有一句 Free,也就是说
处理CM_Release实际上就是Free,
无论调用那一个方法,对于窗体变量都无法彻底清除(成为nil),为什么不能清除和TObject
的构造有关,所以无论Action=caFree,还是Free or Release本质上没有区别,如果你不
显式将变量置为nil下一次使用此变量时就会产生错误,仔细看一下TApplication的CreateForm
方法具体实现,里面的Try和Except部分可以说明问题,注意问题的所处在的层面!