CN112650473A - 一种属性监听方法以及装置 - Google Patents
一种属性监听方法以及装置 Download PDFInfo
- Publication number
- CN112650473A CN112650473A CN201910966181.6A CN201910966181A CN112650473A CN 112650473 A CN112650473 A CN 112650473A CN 201910966181 A CN201910966181 A CN 201910966181A CN 112650473 A CN112650473 A CN 112650473A
- Authority
- CN
- China
- Prior art keywords
- attribute
- monitored
- monitoring
- item object
- person
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及应用程序开发技术领域,具体涉及一种属性监听方法、装置、设备以及存储介质。当需要监听某一个或多个属性的时候,本发明首先创建一个监听类,在所述监听类中定义接口函数,并将待监听属性和所述待监听属性发生变化之后的block回调传入所述接口函数,当所述待监听属性的属性值发生变化的时候,就将收到的消息传给所述block回调,完成对一个对象的监控。本发明使用系统的监听模式,而不是自己去写一个监听者,因而简化了开发过程。同时,系统的监听模式可以通过block回调以实现解耦合,监听一个属性写一个block回调,因而可以降低代码耦合度,很方便地实现消息监听的回调。
Description
技术领域
本发明涉及应用程序开发技术领域,具体涉及一种属性监听方法以及装置。
背景技术
随着互联网技术的快速发展,应用程序极大地提高了人们的生活、学习以及工作的便利性。在应用程序的开发过程中,经常需要对某个对象的属性进行监听。当需要对某个属性进行监听时,现有技术中是通过调用系统的监听添加方法添加一个监听者,并传入一个需要监听的参数,这个参数是需要监听的属性。例如,如果想要监听一个人的身高,那么需要为这个人添加监听者,这个监听者需要监听一个属性,这个属性便是这个人的身高。当这个人的身高发生变化的时候,就会有一个回调,收到回调之后就可以知道监听者的值是新值还是旧值。
当需要观察多个属性的时候,上述方法需要在回调中使用多个条件判断语句对多个属性进行区分,导致代码的耦合度增大。
发明内容
本发明所要解决的是现有技术中对属性进行监听代码耦合度大的问题。
本发明实施例提供了以下方案:
第一方面,本发明实施例提供一种属性监听方法,包括:
步骤S01:创建监听类,并在所述监听类中定义接口函数;
步骤S02:设置待监听属性和所述待监听属性发生变化之后的block回调,并将所述待监听属性和所述block回调传入所述接口函数,在所述接口函数中执行步骤S03至步骤S06;
步骤S03:判断所述待监听属性和所述block回调是否存在,在所述待监听属性和所述block回调存在时,执行步骤S04;
步骤S04:创建item对象,将所述item对象所在的类、所述待监听属性和所述block回调作为所述item对象的属性;
步骤S05:调用系统的监听函数,并将被监听者和所述item对象作为所述监听函数的参数;
步骤S06:将所述被监听者作为key、属性集合作为object进行存储;
步骤S07:在所述监听类中调用系统的监听方法,在所述系统的监听方法中添加监听者和所述被监听者,所述监听者为所述监听类;
步骤S08:当所述系统的监听方法被触发时,获取所述item对象;
步骤S09:判断所述item对象是否存在所述block回调,若所述item对象存在所述block回调,则执行步骤S10;
步骤S10:获取所述待监听属性发生变化之前的值和所述待监听属性发生变化之后的值,并通过所述block回调将所述待监听属性发生变化之前的值、所述待监听属性发生变化之后的值、所述被监听者以及所述监听者返回至需要调用的地方。
在一种可能的实施例中,当不需要对所述待监听属性进行监听时,调用取消注册方法在所有注册信息中删除所述监听者的注册信息,并调用系统的监听移除函数移除所述监听者。
在一种可能的实施例中,在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之前,还包括:
对所述所有注册信息进行加锁;
在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之后,还包括:
对所述所有注册信息进行解锁。
在一种可能的实施例中,所述将所述被监听者作为key、属性集合作为object进行存储包括:
将所述被监听者作为key、所述属性集合作为object存储到字典中。
在一种可能的实施例中,所述将所述被监听者作为key、属性集合作为object进行存储包括:
将所述被监听者作为key、所述属性集合作为object存储到map中。
在一种可能的实施例中,在所述获取所述item对象之前,包括:
对所述item对象进行加锁;
在所述获取所述item对象之后,包括:
对所述item对象进行解锁。
第二方面,本发明实施例提供一种属性监听装置,包括:
类创建模块,用于创建监听类,并在所述监听类中定义接口函数;
参数设置模块,用于设置待监听属性和所述待监听属性发生变化之后的block回调,并将所述待监听属性和所述block回调传入所述接口函数;
第一判断模块,用于判断所述待监听属性和所述block回调是否存在;
对象创建模块,用于在所述待监听属性和所述block回调存在时,创建item对象,将所述item对象所在的类、所述待监听属性和所述block回调作为所述item对象的属性;
函数调用模块,用于调用系统的监听函数,并将被监听者和所述item对象作为所述监听函数的参数;
存储模块,用于将所述被监听者作为key、属性集合作为object进行存储;
监听方法添加模块,用于在所述监听类中调用系统的监听方法,在所述系统的监听方法中添加监听者和所述被监听者,所述监听者为所述监听类;
对象获取模块,用于在所述系统的监听方法被触发时,获取所述item对象;
第二判断模块,用于判断所述item对象是否存在所述block回调;
返回模块,用于在所述item对象存在所述block回调时,获取所述待监听属性发生变化之前的值和所述待监听属性发生变化之后的值,并通过所述block回调将所述待监听属性发生变化之前的值、所述待监听属性发生变化之后的值、所述被监听者以及所述监听者返回至需要调用的地方。
在一种可能的实施例中,所述存储模块用于将所述被监听者作为key、所述属性集合作为object存储到map中。
第三方面,本发明实施例提供一种计算机设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行该计算机程序以实现如上述第一方面任意一项所述的属性监听方法的步骤。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时以实现如上述第一方面任意一项所述的属性监听方法的步骤。
本发明与现有技术相比,具有如下的优点和有益效果:
当需要监听某一个或多个属性的时候,本发明首先创建一个监听类,在所述监听类中定义接口函数,并将待监听属性和所述待监听属性发生变化之后的block回调传入所述接口函数,当所述待监听属性的属性值发生变化的时候,就将收到的消息传给所述block回调,完成对一个对象的监控。本发明使用系统的监听模式,而不是自己去写一个监听者,因而简化了开发过程。同时,系统的监听模式可以通过block回调以实现解耦合,监听一个属性写一个block回调,因而可以降低代码耦合度,很方便地实现消息监听的回调。
进一步,本发明将被监听者作为key、属性集合作为object存储到map中,map为弱引用的哈希表,相对于强引用的字典,map不容易形成循环引用,从而避免循环内存不释放引起的崩溃。
进一步,本发明在获取item对象之前对item对象进行加锁,在获取所述item对象之后对item对象进行解锁,可以有效地防止多线程同时去获取item对象引起错误。
进一步,本发明在不需要对待监听属性进行监听时,调用系统的监听移除函数移除所述监听者,可以减少崩溃的发生。
进一步,本发明在删除监听者的注册信息之前对所有注册信息进行加锁,在删除监听者的注册信息之后对所有注册信息进行解锁,可以有效地防止同时删除多个监听者的注册信息引起的错误。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本说明书实施例提供的方法流程图;
图2是本说明书实施例提供的一种可能的电子设备的硬件结构示意图;
图3是本说明书实施例提供的一种可能的计算机可读存储介质的硬件结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,基于本发明实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明实施例保护的范围。
请参阅图1,图1为本发明实施例提供一种属性监听方法的流程图,具体包括:
步骤S01:创建监听类,并在所述监听类中定义接口函数。
具体地,创建一个类(Class)作为所述监听类,在这个类里面定义一个对外的接口,这个接口的函数为所述接口函数。
步骤S02:设置待监听属性和所述待监听属性发生变化之后的block回调,并将所述待监听属性和所述block回调传入所述接口函数,在所述接口函数中执行步骤S03至步骤S06。
所述待监听属性为需要监听的属性(property),例如,想要监听一个人的身高,则将身高作为所述待监听属性。
通过执行步骤S01和步骤S02,即通过创建所述监听类,在所述监听类中定义所述接口函数,并将所述待监听属性和所述block回调传入所述接口函数,实现对系统的监听方法进行二次封装,当系统的监听方法监听到所述待监听属性发生变化时,可以通过所述block回调返回所述待监听属性发生变化前后的值。
步骤S03:判断所述待监听属性和所述block回调是否存在,在所述待监听属性和所述block回调存在时,执行步骤S04。
具体地,对外界传入的所述监听属性和所述block回调进行判空处理,如果传入的所述监听属性和所述block回调不存在,就直接返回;如果传入的所述待监听属性和所述block回调存在,则执行步骤S04。
步骤S04:创建item对象,将所述item对象所在的类、所述待监听属性和所述block回调作为所述item对象的属性。
在所述接口函数的内部创建所述item对象,所述item对象有多个属性,包括所述item对象所在的类、所述待监听属性和所述block回调。如此,使用所述item对象将所述item对象所在的类、所述待监听属性和所述block回调进行了包装。
通过执行步骤S03至步骤S04,实现对常规的监听对象进行包装,为随后调用系统的监听函数做准备,提供其需要的item对象。
步骤S05:调用系统的监听函数,并将被监听者和所述item对象作为所述监听函数的参数。
在本说明书实施例中,可以采用addObserve函数作为所述系统的监听函数。addObserve函数需要两个参数,一个参数是所述被监听者,例如,需要监听张三的身高,则所述被监听者则为张三;另一个是所述item对象。本步骤是内部封装监听函数,为后续对包装对象处理做准备。
执行步骤S01至步骤S05的前期封装准备,为之后在所述监听类内部调用系统的监听方法提供了必要的配置。
步骤S06:将所述被监听者作为key、属性集合作为object进行存储。
具体地,所述属性集合为将需要观察的一系列属性(比如身高、体重、性别等)包装成的一个集合。可以将所述被监听者作为key、所述属性集合作为object存储到字典或者map中,在本实施例中,将所述被监听者作为key、所述属性集合作为object存储到map中。map类似于字典,但是和字典不同的是,map可以设置为对这个里面的对象实现弱引用,而不会去强持有一个对象,不会导致控制器难释放形成引用环,从而能够避免循环内存不释放引起的崩溃。本步骤是对包装的对象进行存储,方便后续响应监听事件的时候启用。
步骤S07:在所述监听类中调用系统的监听方法,在所述系统的监听方法中添加监听者和所述被监听者,所述监听者为所述监听类。
具体地,可以在所述监听类的内部调用kvoOberve方法。kvoOberve方法的内部实现过程如下:从字典或者map中获取所述被监听者,添加kvoOberve方法,所述监听者为所述监听类。当所述待监听属性发生变化时,就会触发系统的observeValueForKeyPath方法。本步骤使用系统的监听模式,而不是自己去写一个监听者,因而简化了开发过程。
步骤S08:当所述系统的监听方法被触发时,获取所述item对象。
具体地,所述系统的监听方法被触发的触发条件为所述待监听属性发生变化。当所述待监听属性发生变化时,就会触发系统的observeValueForKeyPath方法。在observeValueForKeyPath方法内部有一个参数,这个参数是context,通过参数context去找到所述item对象。本步骤通过系统的监听方法,可以通过所述block回调实现解耦合。进一步,在获取所述item对象之前,可以对所述item对象进行加锁;在获取所述item对象之后,可以对所述item对象进行解锁。通过对所述item对象进行加锁和解锁,可以有效地防止多线程同时去获取item对象引起错误。
步骤S09:判断所述item对象是否存在所述block回调,若所述item对象存在所述block回调,则执行步骤S10。
步骤S10:获取所述待监听属性发生变化之前的值和所述待监听属性发生变化之后的值,并通过所述block回调将所述待监听属性发生变化之前的值、所述待监听属性发生变化之后的值、所述被监听者以及所述监听者返回至需要调用的地方。在本步骤中,系统的监听模式可以通过所述block回调以实现解耦合,监听一个属性写一个block回调,因而可以降低代码耦合度,很方便地实现消息监听的回调。
在本说明书实施例中,所述observeValueForKeyPath方法中change参数包括待监听属性变化前后的旧值和新值,通过change参数,获取所述待监听属性发生变化之前的值和所述待监听属性发生变化之后的值,并通过所述block回调将所述待监听属性发生变化之前的值、所述待监听属性发生变化之后的值、所述被监听者以及所述监听者返回至需要调用的地方。至此,完成对待监听属性的一次监控。
当不需要对所述待监听属性进行监听时,调用取消注册方法在所有注册信息中删除所述监听者的注册信息,并调用系统的监听移除函数移除所述监听者。本发明实施例在不需要对待监听属性进行监听时,调用系统的监听移除函数移除所述监听者,可以减少崩溃的发生。
在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之前,还包括:对所述所有注册信息进行加锁;在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之后,还包括:对所述所有注册信息进行解锁。调用取消注册方法在所有注册信息中删除所述监听者的注册信息,并调用系统的监听移除函数移除所述监听者。如果未取消注册,程序会有存在crash的风险,在实际中一个类出现循环引用导致无法释放的情况还比较常见,本发明在删除监听者的注册信息之前对所有注册信息进行加锁,在删除监听者的注册信息之后对所有注册信息进行解锁,可以有效地防止同时删除多个监听者的注册信息引起的错误。
基于与方法同样的发明构思,本发明实施例还提供了一种属性监听装置,包括:
类创建模块,用于创建监听类,并在所述监听类中定义接口函数;
参数设置模块,用于设置待监听属性和所述待监听属性发生变化之后的block回调,并将所述待监听属性和所述block回调传入所述接口函数;
第一判断模块,用于判断所述待监听属性和所述block回调是否存在;
对象创建模块,用于在所述待监听属性和所述block回调存在时,创建item对象,将所述item对象所在的类、所述待监听属性和所述block回调作为所述item对象的属性;
函数调用模块,用于调用系统的监听函数,并将被监听者和所述item对象作为所述监听函数的参数;
存储模块,用于将所述被监听者作为key、属性集合作为object进行存储;
监听方法添加模块,用于在所述监听类中调用系统的监听方法,在所述系统的监听方法中添加监听者和所述被监听者,所述监听者为所述监听类;
对象获取模块,用于在所述系统的监听方法被触发时,获取所述item对象;
第二判断模块,用于判断所述item对象是否存在所述block回调;
返回模块,用于在所述item对象存在所述block回调时,获取所述待监听属性发生变化之前的值和所述待监听属性发生变化之后的值,并通过所述block回调将所述待监听属性发生变化之前的值、所述待监听属性发生变化之后的值、所述被监听者以及所述监听者返回至需要调用的地方。
在一种可能的实施例中,所述属性监听装置还包括移除模块,所述移除模块用于在不需要对所述待监听属性进行监听时,调用取消注册方法在所有注册信息中删除所述监听者的注册信息,并调用系统的监听移除函数移除所述监听者。
在一种可能的实施例中,所述移除模块还用于在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之前对所述所有注册信息进行加锁,在调用取消注册方法在所有注册信息中删除所述监听者的注册信息之后对所述所有注册信息进行解锁。
在一种可能的实施例中,所述存储模块具体用于将所述被监听者作为key、所述属性集合作为object存储到字典中。
在一种可能的实施例中,所述存储模块具体用于将所述被监听者作为key、所述属性集合作为object存储到map中。
在一种可能的实施例中,所述对象获取模块还用于在获取所述item对象之前对所述item对象进行加锁,在获取所述item对象之后对所述item对象进行解锁。
请参阅图2,图2为本申请实施例提供的电子设备的实施例示意图,包括存储器110、处理器120及存储在存储器120上并可在处理器120上运行的计算机程序111,处理器120执行计算机程序111时实现以下步骤。
步骤S01:创建监听类,并在所述监听类中定义接口函数。
步骤S02:设置待监听属性和所述待监听属性发生变化之后的block回调,并将所述待监听属性和所述block回调传入所述接口函数,在所述接口函数中执行步骤S03至步骤S06。
步骤S03:判断所述待监听属性和所述block回调是否存在,在所述待监听属性和所述block回调存在时,执行步骤S04。
步骤S04:创建item对象,将所述item对象所在的类、所述待监听属性和所述block回调作为所述item对象的属性。
步骤S05:调用系统的监听函数,并将被监听者和所述item对象作为所述监听函数的参数。
步骤S06:将所述被监听者作为key、属性集合作为object进行存储。
步骤S07:在所述监听类中调用系统的监听方法,在所述系统的监听方法中添加监听者和所述被监听者,所述监听者为所述监听类。
步骤S08:当所述系统的监听方法被触发时,获取所述item对象。
步骤S09:判断所述item对象是否存在所述block回调,若所述item对象存在所述block回调,则执行步骤S10。
步骤S10:获取所述待监听属性发生变化之前的值和所述待监听属性发生变化之后的值,并通过所述block回调将所述待监听属性发生变化之前的值、所述待监听属性发生变化之后的值、所述被监听者以及所述监听者返回至需要调用的地方。
可选的,在一种可能的实施例中,所述处理器120还用于:
当不需要对所述待监听属性进行监听时,调用取消注册方法在所有注册信息中删除所述监听者的注册信息,并调用系统的监听移除函数移除所述监听者。
可选的,在一种可能的实施例中,所述处理器120还用于:
在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之前,对所述所有注册信息进行加锁;
在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之后,对所述所有注册信息进行解锁。
可选的,在一种可能的实施例中,所述处理器120具体用于:
将所述被监听者作为key、所述属性集合作为object存储到字典中。
可选的,在一种可能的实施例中,所述处理器120具体用于:
将所述被监听者作为key、所述属性集合作为object存储到map中。
可选的,在一种可能的实施例中,所述处理器120还用于:
在所述获取所述item对象之前,对所述item对象进行加锁;
在所述获取所述item对象之后,对所述item对象进行解锁。
由于本实施例所介绍的电子设备为实施本申请实施例中一种处理装置所采用的设备,故而基于本申请实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本申请实施例中的方法不再详细介绍,只要本领域所属技术人员实施本申请实施例中的方法所采用的设备,都属于本申请所欲保护的范围。
请参阅图3,图3为本申请实施例提供的一种计算机可读存储介质的实施例示意图,其上存储有计算机程序211,该计算机程序211被处理器执行时实现如下步骤。
步骤S01:创建监听类,并在所述监听类中定义接口函数。
步骤S02:设置待监听属性和所述待监听属性发生变化之后的block回调,并将所述待监听属性和所述block回调传入所述接口函数,在所述接口函数中执行步骤S03至步骤S06。
步骤S03:判断所述待监听属性和所述block回调是否存在,在所述待监听属性和所述block回调存在时,执行步骤S04。
步骤S04:创建item对象,将所述item对象所在的类、所述待监听属性和所述block回调作为所述item对象的属性。
步骤S05:调用系统的监听函数,并将被监听者和所述item对象作为所述监听函数的参数。
步骤S06:将所述被监听者作为key、属性集合作为object进行存储。
步骤S07:在所述监听类中调用系统的监听方法,在所述系统的监听方法中添加监听者和所述被监听者,所述监听者为所述监听类。
步骤S08:当所述系统的监听方法被触发时,获取所述item对象。
步骤S09:判断所述item对象是否存在所述block回调,若所述item对象存在所述block回调,则执行步骤S10。
步骤S10:获取所述待监听属性发生变化之前的值和所述待监听属性发生变化之后的值,并通过所述block回调将所述待监听属性发生变化之前的值、所述待监听属性发生变化之后的值、所述被监听者以及所述监听者返回至需要调用的地方。
可选的,在一种可能的实施例中,该计算机程序211被处理器执行时还实现如下步骤:
当不需要对所述待监听属性进行监听时,调用取消注册方法在所有注册信息中删除所述监听者的注册信息,并调用系统的监听移除函数移除所述监听者。
可选的,在一种可能的实施例中,该计算机程序211被处理器执行时还实现如下步骤:
在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之前,对所述所有注册信息进行加锁;
在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之后,对所述所有注册信息进行解锁。
可选的,在一种可能的实施例中,该计算机程序211被处理器执行时具体实现如下步骤:
将所述被监听者作为key、所述属性集合作为object存储到字典中。
可选的,在一种可能的实施例中,该计算机程序211被处理器执行时具体实现如下步骤:
将所述被监听者作为key、所述属性集合作为object存储到map中。
可选的,在一种可能的实施例中,该计算机程序211被处理器执行时还实现如下步骤:
在所述获取所述item对象之前,对所述item对象进行加锁;
在所述获取所述item对象之后,对所述item对象进行解锁。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包括这些改动和变型在内。
Claims (10)
1.一种属性监听方法,其特征在于,包括:
步骤S01:创建监听类,并在所述监听类中定义接口函数;
步骤S02:设置待监听属性和所述待监听属性发生变化之后的block回调,并将所述待监听属性和所述block回调传入所述接口函数,在所述接口函数中执行步骤S03至步骤S06;
步骤S03:判断所述待监听属性和所述block回调是否存在,在所述待监听属性和所述block回调存在时,执行步骤S04;
步骤S04:创建item对象,将所述item对象所在的类、所述待监听属性和所述block回调作为所述item对象的属性;
步骤S05:调用系统的监听函数,并将被监听者和所述item对象作为所述监听函数的参数;
步骤S06:将所述被监听者作为key、属性集合作为object进行存储;
步骤S07:在所述监听类中调用系统的监听方法,在所述系统的监听方法中添加监听者和所述被监听者,所述监听者为所述监听类;
步骤S08:当所述系统的监听方法被触发时,获取所述item对象;
步骤S09:判断所述item对象是否存在所述block回调,若所述item对象存在所述block回调,则执行步骤S10;
步骤S10:获取所述待监听属性发生变化之前的值和所述待监听属性发生变化之后的值,并通过所述block回调将所述待监听属性发生变化之前的值、所述待监听属性发生变化之后的值、所述被监听者以及所述监听者返回至需要调用的地方。
2.根据权利要求1所述的属性监听方法,其特征在于,当不需要对所述待监听属性进行监听时,调用取消注册方法在所有注册信息中删除所述监听者的注册信息,并调用系统的监听移除函数移除所述监听者。
3.根据权利要求2所述的属性监听方法,其特征在于,在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之前,还包括:
对所述所有注册信息进行加锁;
在所述调用取消注册方法在所有注册信息中删除所述监听者的注册信息之后,还包括:
对所述所有注册信息进行解锁。
4.根据权利要求1所述的属性监听方法,其特征在于,所述将所述被监听者作为key、属性集合作为object进行存储包括:
将所述被监听者作为key、所述属性集合作为object存储到字典中。
5.根据权利要求1所述的属性监听方法,其特征在于,所述将所述被监听者作为key、属性集合作为object进行存储包括:
将所述被监听者作为key、所述属性集合作为object存储到map中。
6.根据权利要求1至5任一所述的属性监听方法,其特征在于,在所述获取所述item对象之前,包括:
对所述item对象进行加锁;
在所述获取所述item对象之后,包括:
对所述item对象进行解锁。
7.一种属性监听装置,其特征在于,包括:
类创建模块,用于创建监听类,并在所述监听类中定义接口函数;
参数设置模块,用于设置待监听属性和所述待监听属性发生变化之后的block回调,并将所述待监听属性和所述block回调传入所述接口函数;
第一判断模块,用于判断所述待监听属性和所述block回调是否存在;
对象创建模块,用于在所述待监听属性和所述block回调存在时,创建item对象,将所述item对象所在的类、所述待监听属性和所述block回调作为所述item对象的属性;
函数调用模块,用于调用系统的监听函数,并将被监听者和所述item对象作为所述监听函数的参数;
存储模块,用于将所述被监听者作为key、属性集合作为object进行存储;
监听方法添加模块,用于在所述监听类中调用系统的监听方法,在所述系统的监听方法中添加监听者和所述被监听者,所述监听者为所述监听类;
对象获取模块,用于在所述系统的监听方法被触发时,获取所述item对象;
第二判断模块,用于判断所述item对象是否存在所述block回调;
返回模块,用于在所述item对象存在所述block回调时,获取所述待监听属性发生变化之前的值和所述待监听属性发生变化之后的值,并通过所述block回调将所述待监听属性发生变化之前的值、所述待监听属性发生变化之后的值、所述被监听者以及所述监听者返回至需要调用的地方。
8.根据权利要求7所述的属性监听装置,其特征在于,所述存储模块用于将所述被监听者作为key、所述属性集合作为object存储到map中。
9.一种计算机设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现权利要求1至6任一所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时以实现权利要求1至6任一所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910966181.6A CN112650473B (zh) | 2019-10-12 | 2019-10-12 | 一种属性监听方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910966181.6A CN112650473B (zh) | 2019-10-12 | 2019-10-12 | 一种属性监听方法以及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112650473A true CN112650473A (zh) | 2021-04-13 |
CN112650473B CN112650473B (zh) | 2022-05-10 |
Family
ID=75343573
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910966181.6A Active CN112650473B (zh) | 2019-10-12 | 2019-10-12 | 一种属性监听方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112650473B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060271827A1 (en) * | 2005-05-25 | 2006-11-30 | International Business Machines Corporation | System and method for vertical integrated performance and environment monitoring |
CN104216708A (zh) * | 2014-08-20 | 2014-12-17 | 北京奇艺世纪科技有限公司 | 一种数据监控的方法和装置 |
CN107085532A (zh) * | 2017-03-21 | 2017-08-22 | 东软集团股份有限公司 | 任务监听方法和装置 |
CN108182131A (zh) * | 2017-12-13 | 2018-06-19 | 东软集团股份有限公司 | 监控应用运行状态的方法、装置、存储介质及电子设备 |
CN109710425A (zh) * | 2018-12-19 | 2019-05-03 | 北京金山安全软件有限公司 | 一种消息监听方法和装置 |
CN109800567A (zh) * | 2019-01-17 | 2019-05-24 | 网宿科技股份有限公司 | 监听前台应用启动的方法及装置、终端设备 |
-
2019
- 2019-10-12 CN CN201910966181.6A patent/CN112650473B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060271827A1 (en) * | 2005-05-25 | 2006-11-30 | International Business Machines Corporation | System and method for vertical integrated performance and environment monitoring |
CN104216708A (zh) * | 2014-08-20 | 2014-12-17 | 北京奇艺世纪科技有限公司 | 一种数据监控的方法和装置 |
CN107085532A (zh) * | 2017-03-21 | 2017-08-22 | 东软集团股份有限公司 | 任务监听方法和装置 |
CN108182131A (zh) * | 2017-12-13 | 2018-06-19 | 东软集团股份有限公司 | 监控应用运行状态的方法、装置、存储介质及电子设备 |
CN109710425A (zh) * | 2018-12-19 | 2019-05-03 | 北京金山安全软件有限公司 | 一种消息监听方法和装置 |
CN109800567A (zh) * | 2019-01-17 | 2019-05-24 | 网宿科技股份有限公司 | 监听前台应用启动的方法及装置、终端设备 |
Non-Patent Citations (1)
Title |
---|
QQQOOO: "WinQ/Pods/BGFMDB/BGFMDB/libs/BG/BGDB.h", 《HTTPS://GITHUB.COM/QQQOOOO/WINQ-IOS/BLOB/MASTER-PODS-BGFMDB/BGFMDB/LIBS/BG/BGDB.H》 * |
Also Published As
Publication number | Publication date |
---|---|
CN112650473B (zh) | 2022-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11281661B2 (en) | Blockchain-based data processing method and device | |
EP3285194B1 (en) | Tracing system operations across remote procedure linkages to identify request originators | |
US11502828B2 (en) | Authenticating chaincode to chaincode invocations of a blockchain | |
CN105446811B (zh) | 应用进程关联启动方法及关联启动装置 | |
CN111400355B (zh) | 一种数据查询方法及装置 | |
CN113779545A (zh) | 数据跨进程共享的方法、终端设备及计算机可读存储介质 | |
CN112650473B (zh) | 一种属性监听方法以及装置 | |
WO2019000972A1 (zh) | 一种提示信息的输出方法及装置 | |
WO2017177789A1 (zh) | 移动终端防盗窃方法及装置 | |
CN111708793A (zh) | 一种分布式应用锁实现方法及装置 | |
CN108494749B (zh) | Ip地址禁用的方法、装置、设备及计算机可读存储介质 | |
WO2020015098A1 (zh) | 数据管理方法、终端设备及介质 | |
US11251976B2 (en) | Data security processing method and terminal thereof, and server | |
US9686686B1 (en) | Locating a lost device using crowd GPS | |
CN107766131B (zh) | 任务调度方法和装置 | |
US11843841B2 (en) | Information interaction method and apparatus, and storage medium | |
CN111061546A (zh) | 一种功放管理方法、装置、终端设备及存储介质 | |
CN110865848B (zh) | 组件拦截方法及终端设备 | |
JP5157537B2 (ja) | メモリ管理装置、システム、方法、及び、プログラム | |
US9058503B2 (en) | Systems and methods for secure storage on a mobile device | |
CN106203087B (zh) | 注入防护方法、系统、终端以及存储介质 | |
CN109445951B (zh) | 一种信息处理方法及装置 | |
CN108566401B (zh) | 通信处理方法、通信处理装置及电子终端 | |
CN111859367A (zh) | 锁屏密码设置方法、终端及计算机可读存储介质 | |
CN113472563B (zh) | 一种网络配置下发方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |