当前位置:首页 > 话题广场 > 攻略专题 > 游戏问答

如何初始化接口?总结很全面速看!小技巧:使用对象机制实现组件初始化及销毁

问题

最近重新配置代码时发现,在特殊情况下,组件的破坏界面由于程序的异常而无法调用。这不是什么大问题(整个程序不正常,进程退出是即将发生的事),但对于有一点完美主义的我来说,这确实降低了程序的异常安全性。(阿尔伯特爱因斯坦,《美国电视剧》,节目、节目、节目、节目、节目、节目、节目、节目)

解决方法

我们先来看下面一张图,它描述了程序改造之前的交互场景:

在上图中,我们在CWinApp对象的InitInstance中调用了组件的Init接口初始化组件,然后,如果程序正常退出,CWinApp对象的ExitInstance会被调用,我们在该方法中调用组件销毁接口Exit,这样的成对调用方式,确保组件内部资源的正常初始化和释放。

但是,如果因为程序的Bug,导致正常的程序流没有走到ExitInstance,则组件的Exit接口不会得到调用,从而发生资源泄漏。

将程序进行一点改造,如下图所示:

工作原理

在上图的改造中,我们将组件的初始化和销毁接口的调用封装到一个全局对象的构造和析构方法中,实现组件在程序实例启动时的自动调用。对象的构造析构机制,也确保了组件的销毁接口会得到正常调用。

另外这样做的好处是,你不用担心程序的其他部分使用组件功能时,组件还没有初始化,因为我们的ComponentLauncher全局对象,就像CWinApp全局对象一样,它的构造函数将早于程序的main入口点,所以,我们确保了组件的初始化调用。

对于组件销毁,也是一样。程序的其他代码在接近程序退出的时间点的时候,依然可能会调用组件的业务功能,这个时候,你也无需担心组件被过早的销毁了,因为全局对象的析构位于程序的main入口点之后。

总结

1) 使用这个方法,我们需要定义一个简单的ComponentLauncher对象,其构造函数调用组件初始化接口,析构函数调用组件的销毁接口。实现自动化的成对调用。

2) 需要定义一个全局ComponentLauncher对象,就像CWinApp对象一样。

3) 这个方法的缺点:如果组件是一个大型工程,其初始化或销毁过程十分耗时,则从用户体验上来说:这个程序启动或退出比较慢。这个就需要开发者对程序健壮性和用户体验进行权衡了。

我的建议是:用户喜爱的程序,才是一个好程序。

1.《如何初始化接口?总结很全面速看!小技巧:使用对象机制实现组件初始化及销毁》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《如何初始化接口?总结很全面速看!小技巧:使用对象机制实现组件初始化及销毁》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2107080.html

上一篇

0123456789叫什么键?总结很全面速看!查分|最细致的成绩查询攻略拿走不谢

下一篇

07版word如何插入批注看这里!Word 如何添加和修改批注?

关于如何初始化接口,你需要知道这些Spring容器是怎么初始化的

关于如何初始化接口,你需要知道这些Spring容器是怎么初始化的

如何初始化接口相关介绍,弹簧容器是如何初始化的? 原创宣言 本人不支持签署原创文章未经许可转载。 本公众号所有文章均原创,为了容易理解和记忆,文章以图解为主、代码为辅。如果您感兴趣,欢迎关注! 文/吴潇(Java Senio...

如何初始化接口?总结很全面速看!BIOS的初始化和引导加载程序

如何初始化接口?总结很全面速看!BIOS的初始化和引导加载程序

如何初始化接口相关介绍,BIOS是基本输入/输出系统(Basic Input/Output System)的缩写,是硬件和软件之间的接口,是非常基本的接口。 BIOS提供了一组基本的操作系统使用的指令,系统启动的成功与否依赖...

关于如何初始化接口,你需要知道这些MCU性能测试,CoreMark极简入门教程

关于如何初始化接口,你需要知道这些MCU性能测试,CoreMark极简入门教程

如何初始化接口相关介绍,MCU性能测试最著名的部分是CoreMark和Dhrystone。 CoreMark以每秒迭代为性能评估,而Dhrystone的DMIPS与Dhrystone标准有关。 本文讨论CoreMark,先来...

如何初始化接口?终于找到答案了MyBatis初始化加载 Mapper 接口与XML文件

如何初始化接口?终于找到答案了MyBatis初始化加载 Mapper 接口与XML文件

如何初始化接口相关介绍,在MyBatis初始化过程中,大致有以下几个步骤:分解所有IT类编制 创建Configuration全局配置对象时,TypeAliasRegistry别名注册中心将添加Mybatis所需的相关类,并将...

关于如何初始化接口,你需要知道这些无法初始化windows sockets接口

关于如何初始化接口,你需要知道这些无法初始化windows sockets接口

如何初始化接口相关介绍,请试试这个方法。我也有这种情况。现在用这个方法解决了。可能是昨天的自动更新,可能出了问题,可能是单机。但是只要和互联网接触,就不能运行。今天Vista和Win7好像大部分都中奖了。(大卫亚设)。 应该...

如何初始化接口看这里!什么是 COM 接口?

如何初始化接口看这里!什么是 COM 接口?

如何初始化接口相关介绍,如果你懂C#或Java语言,界面将是一个非常熟悉的概念。 接口是一个对象上一组操作的集合,不涉及任何实现的细节,接口标志着方法和实现的分离。计算机中这种现象叫做解耦(decoupled)。 在 C++...

关于如何初始化接口,你需要知道这些Spring Boot如何在启动时初始化资源?实现CommandLineRunner接口

关于如何初始化接口,你需要知道这些Spring Boot如何在启动时初始化资源?实现CommandLineRunner接口

如何初始化接口相关介绍,在实际工作中,项目启动时需要执行初始化任务(如初始化数据库连接、Redis缓存等)的要求。 今天就给大家介绍 CommandLineRunner接口,帮助大家解决项目启动初始化资源操作。 Comman...

关于如何初始化接口,你需要知道这些S7-300集成DP口之间GSD文件方式的DP主从通信(Step7)

关于如何初始化接口,你需要知道这些S7-300集成DP口之间GSD文件方式的DP主从通信(Step7)

如何初始化接口相关介绍,S7-300集成DP端口之间的GSD文件驱动DP主从通信(Step7) PROFIBUS-DP是一种通信标准,一些符合PROFIBUS-DP约定的第三方设备也可以作为SIMATIC master的从属...