使用Dephi组件的生存期管理

poljik

poljik

2016-02-19 12:47

下面这个使用Dephi组件的生存期管理教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!
?众所周知,创建型设计模式中的都会创建对象。
  可是对象在哪儿释放呢?
  当然,对于抽象工厂和工厂方法以及原型模式中,可以保存一个引用然后在需要的地方把它释放掉。可Singleton模式中却没有这样的引用,或是不能确定它是否创建了。
  此时,Dephi的组件的生存期管理机制就非常有用了,你只需要从TCompenent继承,并在构造函数中把自己的Owner设为另一个被管理的组件(一般来说是你的Form,Frame之类),你创建的对象就会在它的Owner被释放时自动释放掉。呵呵,再也不用羡慕Java程序员了:)
  什么时候从TCompenent继承使用?
  我的建议是:只要可以任何时候。
  由于在创建类的时候不能预测它的使用方式(我不能,也许你能),所以最好新建类都从TCompenent或TCompenent的派生类继承,这样可以防止以后对象的生存期不好处理,而且TCompenent实现了IInterface接口,由于我们的所有的接口都是从IInterface继承(IUnknow也是),所以如果的你的类想实现接口的话,也最好从TCompenent或TCompenent的派生类继承,否则的话你必须自己实现下面这三个方法。
  ??? function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
  ??? function _AddRef: Integer; stdcall;
  ??? function _Release: Integer; stdcall;
  当然如果你要必须要继承的基类不是从TCompenent继承的,那我也没什么好办法啦。
  什么时候自己释放什么时候交给Owner释放?
  先说一下区别,自己释放可以更加有效的利用资源,有更少资源占用。由Owner释放,可以减少错误率,减少代码编写量,使代码更简洁。
  所以,如果你需要多次创建创建次数未知的就要手动释放,只创建一次或有限次并对资源占用影响较小的就由Owner释放好了。一个简单的原则,所有在你覆盖 Detroy中释放的对象都可以由Owner释放。在方法中创建的临时变量绝对不能这样设,因为虽然最后对象还是被释放,但是你可能会多次创建同一个对象,造成大量的资源浪费,除非你把它实现成Singleton。
展开更多 50%)
分享

猜你喜欢

使用Dephi组件的生存期管理

编程语言 网络编程
使用Dephi组件的生存期管理

影响生存期的因素有哪些

电脑网络
影响生存期的因素有哪些

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何延长膀胱癌生存期

电脑网络
如何延长膀胱癌生存期

生殖细胞瘤生存期有多长

生活常识
生殖细胞瘤生存期有多长

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

鼻咽癌患者如何延长生存期

电脑网络
鼻咽癌患者如何延长生存期

在Dephi中使用TStream读写数据的技巧

编程语言 网络编程
在Dephi中使用TStream读写数据的技巧

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win10正式版怎么把图片打开方式恢复默认照片查看器?

Win10正式版怎么把图片打开方式恢复默认照片查看器?

一个简单的投票机器人

一个简单的投票机器人
下拉加载更多内容 ↓