起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 217|回复: 1

[分享]错误“对象必须在环境释放之前释放”的分析**

[复制链接]
发表于 2007-10-30 11:53:29 | 显示全部楼层 |阅读模式
背景知识:环境  http://bbs.justep.com/forum.php?mod=viewthread&tid=2357

对象都是生成在某个环境中的,如果在环境释放时候,发现在这个环境中有一个对象还没有释放就会报这个错误

对象的创建方式有两种:
1 类的构造函数 Create 方法
Create(AOwner: TComponent);
这类的函数表示,对象创建以后,自己不用释放,而是由AOnwer来释放(当然想自己释放也可以),但是如果AOnwer=nil,那么就要自己释放了

一般类的构在函数 Create 需要传递一个环境Context作为参数,这样这个创建出来的对象就生存在这个环境中,在环境释放之前,必须调用对象的Free来释放这个对象,否则就出现标题的错误信息
例如:
  lForm := TForm.Create(Context)
  try
    ...
  finally
    lForm.Free;
  end;

2  Context.GetBizObject
用Context.GetBizObject的方法创建的对象,放在环境的对象缓冲池中,可以被其他对象引用,在环境释放时候会自动释放这个对象,可以不主动释放
  var
    lURL : TBizClassURL;
    lForm: TForm;
  begin
        lURL  := TBizClassURL.Create;
    lURL.BizURL.URL := 'Biz:\operation\test.func\mainform.form';
  lForm := Context.GetBizObject(lURL)  as TForm;
  //这个对象不用主动释放,在环境释放时候会自动释放这个对象的
回复

使用道具 举报

发表于 2007-12-26 14:24:09 | 显示全部楼层
该错误还有可能是由于在创建,打开对象时出错,导致的无法正常释放对象。需要到开发环境下检查一下相应的窗体,文档,功能,信息是否都可以正常打开。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-3 23:49 , Processed in 0.037241 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表