观察中间件析构方法、装置、计算机设备和存储介质
技术领域
本发明涉及计算机技术领域,具体而言,本发明涉及一种观察中间件析构方法、观察中间件析构装置、计算机设备和存储介质。
背景技术
随着互联网技术以及通信技术的快速发展,操作装置已经从个人电脑领域迅速普及到移动终端领域。在操作装置方面,以微软操作装置、安卓操作装置和IOS(由苹果公司开发的操作装置)操作装置为主流。IOS操作装置中,常用到KVO(由观察对象监听被观察对象的一种监听模式)模式,当被观察对象先于观察中间件析构时,容易导致程序崩溃。
目前通常设置KVO控制对象来强引用被观察对象,当观察对象析构时,KVO控制对象会调用并析构观察中间件,这样观察中间件就会先于被观察对象析构,避免程序崩溃。但由于KVO控制对象强引用被观察对象,导致被观察对象的生命周期受到影响而出现不能自主析构的问题。
发明内容
本发明的目的旨在至少能解决上述的技术缺陷之一,特别是被观察对象的生命周期受到影响而出现不能自主析构的技术缺陷。
本发明提供一种观察中间件析构方法,包括如下步骤:
获取观察对象、被观察对象与观察中间件之间的监听关系;
设置所述观察中间件的第一属性信息,并将所述第一属性信息添加到被观察对象中;其中,所述第一属性信息强引用所述观察中间件;
当需要析构所述被观察对象时,根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象。
在一个实施例中,所述获取观察对象、被观察对象与观察中间件之间的监听关系的步骤之前,还包括:
建立所述观察对象和所述被观察对象之间的监听关系,并生成所述观察中间件。
在一个实施例中,所述监听关系为所述观察对象监听所述被观察对象;所述观察中间件在所述监听关系建立时,生成于所述观察对象和所述被观察对象之间。
在一个实施例中,所述根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象的步骤包括:
利用所述第一属性信息对应的强引用关系析构所述观察中间件;
在所述观察中间件被析构后,析构所述被观察对象。
在一个实施例中,所述根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象的步骤之前,还包括:
接收针对所述被观察对象的第一析构指令,根据所述第一析构指令查询所述被观察对象的属性信息;
当查找到所述观察中间件的第一属性信息时,调用所述第一属性信息析构所述观察中间件。
在一个实施例中,所述观察中间件的析构方法还包括:
设置所述被观察对象的第二属性信息,并将所述第二属性信息添加到指定的析构发起对象上;其中,所述第二属性信息弱引用所述被观察对象;
当需要析构所述析构发起对象时,根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象。
在一个实施例中,所述根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象的步骤,包括:
利用所述第二属性信息对应的弱引用关系和所述第一属性信息对应的强引用关系,析构所述观察中间件;
在所述观察中间件被析构后,析构所述析构发起对象。
在一个实施例中,所述根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象的步骤之前,还包括:
接收针对所述析构发起对象的第二析构指令,根据所述第二析构指令查询所述析构发起对象的属性信息;
当查找到所述析构发起对象的第二属性信息时,调用所述第二属性信息。
在一个实施例中,所述利用所述第二属性信息对应的弱引用关系和第一属性信息对应的强引用关系,析构所述观察中间件的步骤,包括:
根据所述第二属性信息对应的弱引用关系,查询所述被观察对象的属性信息;
当查询到所述第一属性信息时,根据所述第一属性信息的强引用关系析构所述观察中间件。
本发明还提供一种观察中间件析构装置,包括:
监听关系建立模块,用于获取观察对象、被观察对象与观察中间件之间的监听关系;
属性设置模块,用于设置所述观察中间件的第一属性信息,并将所述第一属性信息添加到被观察对象中;其中,所述第一属性信息强引用所述观察中间件;
析构模块,用于当需要析构所述被观察对象时,根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象。
本发明还提供一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行如任一实施例所述观察中间件析构方法的步骤。
本发明还提供一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行任一实施例所述观察中间件析构方法的步骤。
上述的观察中间件析构方法、装置、计算机设备和存储介质,通过获取观察对象、被观察对象与观察中间件之间的监听关系;设置所述观察中间件的第一属性信息,并将所述第一属性信息添加到被观察对象中;其中,所述第一属性信息强引用所述观察中间件;当需要析构所述被观察对象时,根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象。可以在被观察对象析构时,根据被观察对象的第一属性信息和观察中间件之间的强引用关系,先析构观察中间件,避免程序崩溃的同时,不会影响被观察对象的生命周期。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为一个实施例中观察中间件的析构方法的应用环境示意图;
图2为一个实施例中观察中间件的析构方法的流程图;
图3为一个实施例中观察中间件的析构过程的结构示意图;
图4为一个实施例中观察中间件的析构方法的流程图;
图5为另一个实施例中观察中间件的析构方法的流程图;
图6为一个实施例中观察中间件的析构过程的结构示意图;
图7为另一个实施例中观察中间件的析构过程的结构示意图;
图8为一个实施例中观察中间件的析构装置结构示意图;
图9为一个实施例中计算机设备的内部结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本申请提供的观察中间件的析构方法,可以应用于如图1所示的应用环境中。如图1所示,观察对象监听被观察对象时,生成观察中间件,其中,观察中间件需要先于被观察对象析构,以避免程序崩溃。具体的,服务器获取观察对象、被观察对象与观察中间件之间的监听关系;服务器设置所述观察中间件的第一属性信息,并将所述第一属性信息添加到被观察对象中;其中,所述第一属性信息强引用所述观察中间件;当需要析构所述被观察对象时,服务器根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象。
在一个实施例中,如图2所示,提供了一种观察中间件的析构方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
步骤S201,获取观察对象、被观察对象与观察中间件之间的监听关系。
本步骤中,可以获取已经建立好的观察对象、被观察对象与观察中间件之间的监听关系。
在一个实施例中,步骤S201的获取观察对象、被观察对象与观察中间件之间的监听关系的步骤之前,还包括:建立所述观察对象和所述被观察对象之间的监听关系,并生成所述观察中间件。
具体的,所述监听关系为所述观察对象监听所述被观察对象;所述观察中间件在所述监听关系建立时,生成于所述观察对象和所述被观察对象之间。
步骤S202,设置所述观察中间件的第一属性信息,并将所述第一属性信息添加到被观察对象中;其中,所述第一属性信息强引用所述观察中间件。
其中,观察中间件的第一属性信息即观察中间件的引用属性。
在一种实施过程中,可以将第一属性信息添加到被观察对象中,此时,由于第一属性信息强引用观察中间件,因此,被观察对象强引用所述观察中间件。
在另一种实施过程中,如图3所示,可以基类添加第一属性信息P到被观察对象和观察对象中,但此时只有被观察对象的第一属性信息P是强引用观察中间件的,观察对象的第一属性信息P和观察中间件之间没有强引用关系,因此,也只有被观察对象强引用观察中间件。
步骤S203,当需要析构所述被观察对象时,根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象。
可以理解的是,由于第一属性信息强引用观察中间件,因此,当需要析构被观察对象时,首先根据所述第一属性信息先析构观察中间件,再析构所述被观察对象。
在一个实施例中,如图4所示,步骤S203的根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象,包括:
步骤S310,利用所述第一属性信息对应的强引用关系析构所述观察中间件。
步骤S320,在所述观察中间件被析构后,析构所述被观察对象。
在具体实施过程中,当需要析构被观察对象时,会查询被观察对象的所有属性,当查询到被观察对象的第一属性信息时,就会查询到第一属性信息所强引用的观察中间件,那么观察中间件就会被先被析构,然后被观察对象才会析构。
在一个实施例中,步骤S203的根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象之前,还包括:
(1)接收针对所述被观察对象的第一析构指令,根据所述第一析构指令查询所述被观察对象的属性信息。
如图3所示,当被观察对象接收到第一析构指令时,根据第一析构指令查询被观察对象的属性信息。
(2)当查找到所述观察中间件的第一属性信息时,调用所述第一属性信息析构所述观察中间件。
当查询到被观察对象的第一属性信息P时,由于第一属性信息P具有引用关系,因此,调用第一属性信息P析构强引用的观察中间件。
在本实施例中,由于被观察对象的第一属性信息强引用观察中间件,因此,当接收到针对被观察对象的第一析构指令时,观察中间件就会根据针对被观察对象的第一析构指令而先被析构,然后被观察对象才会析构。观察中间件比被观察对象先析构,程序不会出现崩溃,此外,被观察对象的生命周期也没有收到任何影响。
上述的观察中间件的析构方法,通过获取观察对象、被观察对象与观察中间件之间的监听关系;设置所述观察中间件的第一属性信息,并将所述第一属性信息添加到被观察对象中;其中,所述第一属性信息强引用所述观察中间件;当需要析构所述被观察对象时,根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象。可以在被观察对象析构时,根据被观察对象的第一属性信息和观察中间件之间的强引用关系,先析构观察中间件,避免程序崩溃的同时,不会影响被观察对象的生命周期。
在一个实施例中,如图5所示,本发明提供的观察中间件的析构方法,还包括:
步骤S204,设置所述被观察对象的第二属性信息,并将所述第二属性信息添加到指定的析构发起对象上;其中,所述第二属性信息弱引用所述被观察对象。
其中,被观察对象的第二属性信息即被观察对象的引用属性。
在一种实施过程中,可以将第二属性信息添加到析构发起对象中,此时,由于第二属性信息弱引用被观察对象,因此,析构发起对象弱引用所述观察中间件。
需要注意的是,可以指定析构发起对象为除被观察对象和观察对象以外的其他对象,也可以指定析构发起对象为观察对象。
当指定析构发起对象为观察对象时,可以应用于被观察对象是个单例的情况,此时需要在观察对象析构的时候,解除观察的关系,即析构观察中间件。如图6所示,可以基类添加第二属性信息D到被观察对象和观察对象中,但此时只有观察对象的第二属性信息D是弱引用被观察对象的,因此,观察对象弱引用被观察对象。
当指定除被观察对象和观察对象以外的其他对象为析构发起对象时,如图7所示,可以基类添加第二属性D到被观察对象、观察对象和析构发起对象中,但此时只有析构发起对象的第二属性信息D是弱引用被观察对象的,因此,析构发起对象弱引用被观察对象。
在上述几种实施过程中,由于被观察对象是被弱引用,因此,并不影响被观察对象的生命周期。
步骤S205,当需要析构所述析构发起对象时,根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象。
本步骤中,当需要析构析构发起对象时,会查询析构发起对象的所有属性,当查询到析构发起对象的第二属性信息时,就会查询到第二属性信息所弱引用的被观察对象,然后查询被观察对象的属性,从而查询到第一属性信息,根据第一属性信息的强引用关系,先析构观察中间件,然后再析构析构发起对象。
在一个实施例中,步骤S205根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象之前,还包括:
(1)接收针对所述析构发起对象的第二析构指令,根据所述第二析构指令查询所述析构发起对象的属性信息。
以图6所示为例进行说明,当析构发起对象,即图6中的观察对象接收到第二析构指令时,根据所述第二析构指令查询观察对象的所有属性信息,即第一属性信息P和第二属性信息D。
(2)当查找到所述析构发起对象的第二属性信息时,调用所述第二属性信息。
当查询到第二属性信息D时,由于第二属性信息D具有引用关系,因此,调用第二属性信息D。
在一个实施例中,步骤S205的根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象,包括:
步骤S510,利用所述第二属性信息对应的弱引用关系和所述第一属性信息对应的强引用关系,析构所述观察中间件;
步骤S520,在所述观察中间件被析构后,析构所述析构发起对象。
在一个实施例中,步骤S510的利用所述第二属性信息对应的弱引用关系和第一属性信息对应的强引用关系,析构所述观察中间件,包括:
(1)根据所述第二属性信息对应的弱引用关系,查询所述被观察对象的属性信息;
(2)当查询到所述第一属性信息时,根据所述第一属性信息的强引用关系析构所述观察中间件。
上述实施例中,由于析构发起对象的第二属性信息弱引用被观察对象,而被观察对象的第一属性信息又强引用观察中间件,因此,当接收到针对析构发起对象的第二析构指令时,观察中间件就会根据第二析构指令而先被析构,然后析构发起对象才会析构。观察中间件比被观察对象先析构,程序不会出现崩溃,此外,被观察对象的生命周期也没有收到任何影响。
上述的观察中间件的析构方法,通过获取观察对象、被观察对象与观察中间件之间的监听关系;设置所述观察中间件的第一属性信息,并将所述第一属性信息添加到被观察对象中;其中,所述第一属性信息强引用所述观察中间件;设置所述被观察对象的第二属性信息,并将所述第二属性信息添加到指定的析构发起对象上;其中,所述第二属性信息弱引用所述被观察对象;当需要析构所述析构发起对象时,根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象。可以在被观察对象析构时,根据被观察对象的第一属性信息和观察中间件之间的强引用关系,以及析构发起对象和被观察对象之间的弱引用关系,可以先析构观察中间件,避免程序崩溃,同时不会影响被观察对象的生命周期。
如图8所示,图8为一个实施例中观察中间件的析构装置的结构示意图,本实施例中提供一种观察中间件的析构装置,包括监听关系建立模块801、属性设置模块802和析构模块803,其中:
监听关系建立模块801,用于获取观察对象、被观察对象与观察中间件之间的监听关系;
属性设置模块802,用于设置所述观察中间件的第一属性信息,并将所述第一属性信息添加到被观察对象中;其中,所述第一属性信息强引用所述观察中间件;
析构模块803,用于当需要析构所述被观察对象时,根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象。
关于观察中间件的析构装置的具体限定可以参见上文中对于观察中间件的析构方法的限定,在此不再赘述。上述观察中间件的析构装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
如图9所示,图9为一个实施例中计算机设备的内部结构示意图。该计算机设备包括通过装置总线连接的处理器、非易失性存储介质、存储器和网络接口。其中,该计算机设备的非易失性存储介质存储有操作装置、数据库和计算机可读指令,数据库中可存储有控件信息序列,该计算机可读指令被处理器执行时,可使得处理器实现一种观察中间件的析构方法。该计算机设备的处理器用于提供计算和控制能力,支撑整个计算机设备的运行。该计算机设备的存储器中可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行一种观察中间件的析构方法。该计算机设备的网络接口用于与终端连接通信。本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提出了一种计算机设备,计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如下步骤:获取观察对象、被观察对象与观察中间件之间的监听关系;设置所述观察中间件的第一属性信息,并将所述第一属性信息添加到被观察对象中;其中,所述第一属性信息强引用所述观察中间件;当需要析构所述被观察对象时,根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象。
在其中一个实施例中,处理器执行计算机程序时所述获取观察对象、被观察对象与观察中间件之间的监听关系的步骤之前,还包括:建立所述观察对象和所述被观察对象之间的监听关系,并生成所述观察中间件。
在其中一个实施例中,处理器执行计算机程序时所述监听关系为所述观察对象监听所述被观察对象;所述观察中间件在所述监听关系建立时,生成于所述观察对象和所述被观察对象之间。
在其中一个实施例中,处理器执行计算机程序时所述根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象的步骤包括:利用所述第一属性信息对应的强引用关系析构所述观察中间件;在所述观察中间件被析构后,析构所述被观察对象。
在其中一个实施例中,处理器执行计算机程序时所述根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象的步骤之前,还包括:接收针对所述被观察对象的第一析构指令,根据所述第一析构指令查询所述被观察对象的属性信息;当查找到所述观察中间件的第一属性信息时,调用所述第一属性信息析构所述观察中间件。
在其中一个实施例中,处理器执行计算机程序时还包括:设置所述被观察对象的第二属性信息,并将所述第二属性信息添加到指定的析构发起对象上;其中,所述第二属性信息弱引用所述被观察对象;当需要析构所述析构发起对象时,根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象。
在其中一个实施例中,处理器执行计算机程序时所述根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象的步骤,包括:利用所述第二属性信息对应的弱引用关系和所述第一属性信息对应的强引用关系,析构所述观察中间件;在所述观察中间件被析构后,析构所述析构发起对象。
在其中一个实施例中,处理器执行计算机程序时所述根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象的步骤之前,还包括:接收针对所述析构发起对象的第二析构指令,根据所述第二析构指令查询所述析构发起对象的属性信息;当查找到所述析构发起对象的第二属性信息时,调用所述第二属性信息。
在其中一个实施例中,处理器执行计算机程序时所述利用所述第二属性信息对应的弱引用关系和第一属性信息对应的强引用关系,析构所述观察中间件的步骤,包括:根据所述第二属性信息对应的弱引用关系,查询所述被观察对象的属性信息;当查询到所述第一属性信息时,根据所述第一属性信息的强引用关系析构所述观察中间件。
在一个实施例中,提出了一种存储有计算机可读指令的存储介质,该计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如下步骤:获取观察对象、被观察对象与观察中间件之间的监听关系;设置所述观察中间件的第一属性信息,并将所述第一属性信息添加到被观察对象中;其中,所述第一属性信息强引用所述观察中间件;当需要析构所述被观察对象时,根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象。
在其中一个实施例中,计算机可读指令被处理器执行时所述获取观察对象、被观察对象与观察中间件之间的监听关系的步骤之前,还包括:建立所述观察对象和所述被观察对象之间的监听关系,并生成所述观察中间件。
在其中一个实施例中,计算机可读指令被处理器执行时所述监听关系为所述观察对象监听所述被观察对象;所述观察中间件在所述监听关系建立时,生成于所述观察对象和所述被观察对象之间。
在其中一个实施例中,计算机可读指令被处理器执行时所述根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象的步骤包括:利用所述第一属性信息对应的强引用关系析构所述观察中间件;在所述观察中间件被析构后,析构所述被观察对象。
在其中一个实施例中,计算机可读指令被处理器执行时所述根据所述第一属性信息先析构所述观察中间件,再析构所述被观察对象的步骤之前,还包括:接收针对所述被观察对象的第一析构指令,根据所述第一析构指令查询所述被观察对象的属性信息;当查找到所述观察中间件的第一属性信息时,调用所述第一属性信息析构所述观察中间件。
在其中一个实施例中,计算机可读指令被处理器执行时还包括:设置所述被观察对象的第二属性信息,并将所述第二属性信息添加到指定的析构发起对象上;其中,所述第二属性信息弱引用所述被观察对象;当需要析构所述析构发起对象时,根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象。
在其中一个实施例中,计算机可读指令被处理器执行时所述根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象的步骤,包括:利用所述第二属性信息对应的弱引用关系和所述第一属性信息对应的强引用关系,析构所述观察中间件;在所述观察中间件被析构后,析构所述析构发起对象。
在其中一个实施例中,计算机可读指令被处理器执行时所述根据所述第二属性信息和所述第一属性信息先析构所述观察中间件,再析构所述析构发起对象的步骤之前,还包括:接收针对所述析构发起对象的第二析构指令,根据所述第二析构指令查询所述析构发起对象的属性信息;当查找到所述析构发起对象的第二属性信息时,调用所述第二属性信息。
在其中一个实施例中,计算机可读指令被处理器执行时所述利用所述第二属性信息对应的弱引用关系和第一属性信息对应的强引用关系,析构所述观察中间件的步骤,包括:根据所述第二属性信息对应的弱引用关系,查询所述被观察对象的属性信息;当查询到所述第一属性信息时,根据所述第一属性信息的强引用关系析构所述观察中间件。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。