CN110968147B - 定时器创建的方法、装置、电子设备及介质 - Google Patents
定时器创建的方法、装置、电子设备及介质 Download PDFInfo
- Publication number
- CN110968147B CN110968147B CN201811154632.8A CN201811154632A CN110968147B CN 110968147 B CN110968147 B CN 110968147B CN 201811154632 A CN201811154632 A CN 201811154632A CN 110968147 B CN110968147 B CN 110968147B
- Authority
- CN
- China
- Prior art keywords
- timer
- creating
- timetarget
- class
- interface function
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/04—Generating or distributing clock signals or signals derived directly therefrom
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种定时器的创建方法,包括:创建DYGoodTimer类,该DYGoodTimer类包括接口函数,该接口函数用于传递创建定时器所需的配置信息,该接口函数为类方法;创建timeTarget对象,该timeTarget对象用于引用定时器,该timeTarget对象被DYGoodTimer类引用,使得定时器不被控制器持有;根据配置信息创建定时器,并将定时器赋值给timeTarget对象,使得定时器被timeTarget对象弱引用。通过这样的设计,将控制器对定时器的强引用转化为DYGoodTimer类对定时器的弱引用,使得定时器能够主动被释放,解决了控制器不释放定时器导致系统内存泄漏的问题。
Description
技术领域
本发明涉及互联网移动端开发领域,尤其涉及一种定时器创建的方法、装置、电子设备及介质。
背景技术
随着互联网移动端开发的快速发展,手机移动端已日渐普及,而手机移动端的发展项目中存在多种计时系统,这些计时系统都依赖于系统的定时器,比如用于定时更新界面,定时发送请求等等。目前使用较多的是通过strong类型的NSTimer对象创建定时器,该类型的定时器被控制器强持有,在使用这种定时器时,需要及时的停止定时器,并将定时器设置为nil以清空定时器,若不对定时器进行此操作,定时器就会无限循环执行,控制器不能及时释放定时器,导致内存泄漏甚至应用崩溃。
发明内容
(一)要解决的技术问题
针对目前存在的技术问题,本发明提出一种定时器创建的方法、装置、电子设备及介质,在创建定时器的过程中,通过对定时器进行包装,使得不需要手动释放定时器,用于解决了内存泄漏的问题。
(二)技术方案
本发明提供一种定时器的创建方法,其特征在于,包括:创建引用类DYGoodTimer,该引用类DYGoodTimer包括接口函数creatTimerWithInteval,该接口函数creatTimerWithInteval用于传递创建定时器所需的配置信息,该接口函数creatTimerWithInteval为类方法;创建引用对象timeTarget,该引用对象timeTarget用于引用定时器,该引用对象timeTarget被引用类DYGoodTimer引用,使得定时器不被控制器持有;根据配置信息创建定时器,并将定时器赋值给引用对象timeTarget,使得定时器被引用对象timeTarget弱引用,该弱引用使得定时器主动被释放。
可选地,为接口函数creatTimerWithInteval设置参数:时间间隔TimeInterval、执行对象target、执行方法selector、携带信息timePara及重复执行repeats,各参数的内容为配置信息,其中,时间间隔TimeInterval的值为定时器的时间间隔,执行对象target的值为持有定时器的对象,执行方法selector的值为定时器执行的方法、携带参数timePara的值为执行的方法携带的内容,重复执行repeats的值为是否重复触发定时器。
可选地,引用对象timeTarget包括引用强弱变量timer变量,将引用强弱变量timer变量的值设置为weak,使得引用对象timeTarget弱引用定时器。
可选地,根据接口函数creatTimerWithInteval创建定时器,包括:将接口函数creatTimerWithInteval的参数的值传递给定时器创建方法timerWithTimeInterval的参数;调用定时器创建方法timerWithTimeInterval方法创建定时器。
可选地,在定时器创建完成后将定时器添加到运行循环runloop中,使得定时器能够被运行。
可选地,将执行方法selector设置为回调函数fire,在实现该回调函数fire时,判断执行对象target是否存在:
若存在,则通过执行对象target完成对回调函数fire的调用;
若不存在,则定时器被释放。
可选地,将定时器添加到运行循环runloop中,包括:在运行循环runloop中为定时器指定添加的模式,使得定时器能够被运行。
本发明另一方面提供一种定时器创建装置,该定时器包括:接口函数生成模块,用于创建引用类DYGoodTimer,并在引用类DYGoodTimer中创建接口函数creatTimerWithInteval,该接口函数creatTimerWithInteval用于传递创建定时器所需的配置信息,该接口函数creatTimerWithInteval为类方法;引用对象timeTarget生成模块,用于创建引用对象timeTarget,引用对象timeTarget用于持有所述定时器,引用对象timeTarget被引用类DYGoodTimer引用,使得所述定时器不被控制器持有;定时器创建模块,根据配置信息创建定时器,并将创建的定时器赋值给引用对象timeTarget,使得定时器被引用对象timeTarget弱引用,该弱引用使得定时器主动被释放。
本发明另一方面提供一种电子设备,包括:处理器;存储器,其存储有计算机可执行程序,该程序在被处理器执行时,使得处理器执行本发明中的定时器的设计方法。
本发明另一方面还提供一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明中定时器的设计方法。
(三)有益效果
本发明提供一种定时器创建方法、装置、电子设备及介质,通过创建DYGoodTimer类,并在DYGoodTimer类创建对外的creatTimerWithInteval接口函数,并将创建定时器所需的配置信息传递给timerWithTimeInterval方法,然后调用timerWithTimeInterval方法创建定时器,通过采用creatTimerWithInteval类方法创建定时器,避免了控制器强持有定时器导致不能及时释放的问题,同时,将创建的定时器赋值给创建的timerTarget对象,并将timerTarget对象的timer变量设置为weak,使得创建的定时器被timerTarget对象弱引用,而timerTarget对象又被DYGoodTimer类引用,这样将控制器对定时器的强引用转化为DYGoodTimer类定时器的弱引用,使得定时器能够主动被释放,解决了控制器不释放定时器导致系统内存泄漏的问题
附图说明
为了更完整地理解本发明及其优势,现在将参考结合附图的以下描述,其中:
图1示意性示出了根据本发明实施例的定时器设计方法的流程图。
图2示意性示出了根据本发明实施例的定时器创建装置的框图。
图3示意性示出了根据本发明实施例的电子设备的框图。
具体实施方式
以下,将参照附图来描述本发明的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本发明的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本发明实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。因此,本发明的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。
图1示意性示出了根据本发明实施例的定时器的设计方法。
如图1所示,方法包括:
S1,创建DYGoodTimer类(引用类),该DYGoodTimer类包括接口函数creatTimerWithInteval,该接口函数creatTimerWithInteval用于传递创建定时器所需的配置信息,该接口函数creatTimerWithInteval为类方法,使得所述定时器不被控制器持有。
在创建定时器时,需要对定时器进行信息的配置,如表1所示,这些配置信息包括TimeInterval(定时器执行的时间间隔)、selector(执的行方法,比如回调函数)、target(执行的方法对象)、timePara(执行的方法传递的参数,比如用户信息userinfo和定时器模式mode)及repeats(是否重复执行)。例如传统创建定时器的一种方法:
NSTimer*timer=[[NSTimer alloc]initWithFireDate:[NSDate date]interval:1target:self selector:@selector(timerFire)userInfo:nil repeats:YES],从该方法中可以看到,定时器的时间间隔设置为为1s,该定时器的target参数设置为self,表示该定时器被系统本身的控制器所持有,定时器执行的方法为timerFire回调函数,用于通知机制,通知设置有该定时器的某事件发生的状态,且定时器每次记数一下,都需要执行一次回调函数,timePara参数设置为nil,说明携带的用户信息为空,且定时器重复触发。为定时器配置相关信息是创建定时器的前提。又例如,在日常的工作中,类似于微信或支付宝支付后定时通知使用方,需要每隔15秒执行一次通知,定时器的将时间间隔设置为15s,即表明每15s后触发该定时器;执行方法的对象即为持有该定时器的对象,一般定时器持有的对象系统控制器,这也正式本发明所需解决的技术问题,本发明将定时器设置为对象的弱引用;执行的方法一般为定时器触发的回调函数,该回调函数为一个通知机制,传递的参数即为该回调函数携带的参数,及上文描述的用户信息userinfo和定时器模式mode等,将repeats的值设为yes表示该定时器重复执行,设为no表示该定时器只执行一次。
目前,定时器的配置信息普遍采用对象方法进行配置,而对象方法容易导致创建的定时器被控制器强引用,强引用表明该控制器强持有定时器,强持有的状态导致定时器不能很好的被释放,从而引发内存泄漏的问题。因此,本发明实施例采用类方法对定时器进行信息的配置,具体方法为:
创建一个DYGoodTimer类,该DYGoodTimer类继承于NSObject,在DYGoodTimer类中创建对外的creatTimerWithInteval接口函数,这样创建的接口函数creatTimerWithInteval为类方法,该DYGoodTimer类用于调用接口函数creatTimerWithInteval,并间接引用创建的定时器,该接口函数creatTimerWithInteval设置有参数时间间隔TimeInterval、执行方法selector、执行对象target、携带参数timePara及重复执行repeats,各参数的内容对应创建定时器所需的配置信息。在创建定时器时,通过DYGoodTimer类调用接口函数creatTimerWithInteval从外界获取创建定时器所需的配置信息,并将这些配置信息传递给创建定时器所调用的timerWithTimeInterval方法内的各参数,然后调用timerWithTimeInterval方法创建定时器。通过这种类方法创建定时器不被控制器所持有,解决了控制器强持有定时器而不容易被释放的问题。
S2,创建timeTarget对象(引用对象),该timeTarget对象用于引用创建的定时器,该timeTarget对象被DYGoodTimer类引用,使得定时器不被控制器持有。
在上述操作S2中,创建的timeTarget对象继承于NSObject,该timeTarget对象被操作S1中创建的DYGoodTimer类引用,该timeTarget对象包括三个变量:target变量、selector变量及timer变量。target变量和selector变量分别用于保存接口函数creatTimerWithInteval的selector参数和target参数传递的内容,即定时器的部分配置信息(执行的方法和执行方法的对象),timer变量的值即为timeTarget对象对定时器的引用关系,通过这样的转换,使得定时器被DYGoodTimer类引用。同时,创建一个timePara对象,该timePara对象包括userinfo属性和mode属性,userinfo属性表示的是持有定时器的系统关联的用户信息,该用户信息包括如用户名、密码或与指定URI关联的信息等,mode属性表示的是定时器添加到runloop中使指定的模式。该timePara对象用于保存接口函数creatTimerWithInteval timePara参数传递的内容,在后续创建完定时器后根据timePara参数中的mode的类型指定将定时器添加到runloop中的哪一个模式,使得定时器能够被运行。
在后续定时器创建完成以后会将定时器赋值给timeTarget对象的timer变量,而timer变量的值决定timeTarget对象对定时器的引用关系,timer变量取值可为strong和weak,strong表示定时器被timeTarget对象强引用,weak表示定时器被timeTarget对象弱引用,所谓强引用表示持有对象,即该timeTarget对象持有定时器,在不需要定时器,需要手动将定时器释放掉,所谓弱引用表示不持有对象,即该timeTarget对象不持有定时器,在不需要定时器时,定时器会自动被赋值为nil,本发明实施例在后续创建定时器时将timer变量的值设置为weak。
S3,根据配置信息创建定时器,并将创建的定时器赋值给timeTarget对象,使得定时器被timeTarget对象引用。
首先,调用S1中创建的接口函数creatTimerWithInteval获取已经配置好的的创建定时器所需的配置信息,这些配置信息为操作S1中叙述的信息,并将这些配置信息传递给创建定时器调用的timerWithTimeInterval方法,该imerWithTimeInterval方法同样包括参数TimeInterval、selector、target、timePara及repeats,与接口函数creatTimerWithInteval的参数是对应的,分别保存接口函数creatTimerWithInteval的参数中的内容,在传递过程中,有些参数需要进行一定的转化。
然后,获取系统的NSTimer对象,通过NSTimer对象调用timerWithTimeInterval方法创建定时器。当定时器创建完成以后,将创建的定时器赋值给timeTarget对象的timer变量,并将timer变量的值设置为weak,这样创建的定时器被timeTarget对象弱引用,与强引用不同,弱引用不持有对象,弱引用的对象会自动被赋值为nil(空)即弱引用会制动指向nil,因此,该timeTarget对象不持有定时器,即DYGoodTimer类间接地弱引用定时器,在使用定时器的过程中,就不需要手动停止或将定时器置为nil,能够及时释放定时器。
另外,定时器的本质是加入到了RunLoop(运行循环)的定时器列表中,从而随着运行循环来实现定时器的功能。因此,NSTimer除了构造,还需要加入RunLoop中,在创建完定时器后,要将创建的定时器添加到系统的runloop中,这样才能保证创建的定时器能够正常运行,一个定时器可以被添加到runloop的多个模式,比如在主线程中runloop一般处于NSDefaultRunLoopMode模式,而当滑动屏幕的时候,比如UIScrollView或者它的子类UITableView、UICollectionView等滑动时,runloop处于UITrackingRunLoopMode模式,因此,如果想让定时器在滑动的时候也能够触发,就可以分别添加到这两个模式。或者直接用NSRunLoopCommonModes一个模式集,包含了上面的两种模式。但一个定时器只能被添加到一个runloop,若定时器被添加到多个runloop中,则只有其中一个有效,即只有其中一个runloop中的定时器能够运行。
在本发明实施例中,定时器的selector(执行方法)为fire函数,fire函数的具体实现过程为:
判断当前的target对象是否存在,如果存在,则判断定时器timePara对象的userinfo属性是否为timePara类型,如果是,则持有定时器的target对象调用perforSelector函数,通过该perforSelector函数调用fire函数,从而实现fire函数;如果当前的target对象不存在,则将定时器设置为invalid(无效状态)。
综上所述,本发明的实施例通过创建一个DYGoodTimer类,并在DYGoodTimer类创建一个对外的接口函数creatTimerWithInteval,并将创建定时器所需的配置信息传递给timerWithTimeInterval方法,然后调用timerWithTimeInterval方法创建定时器,通过采用creatTimerWithInteval类方法创建定时器,避免了控制器强持有定时器导致不能及时释放的问题,同时,将创建的定时器赋值给创建的timerTarget对象的timer变量,并将timerTarget对象的timer变量设置为weak,使得创建的定时器被timerTarget对象弱引用,而timerTarget对象又被DYGoodTimer类引用,通过这样的包装,将控制器对定时器的强引用转化为DYGoodTimer类定时器的弱引用,使得定时器能够主动被释放,解决了控制器不释放定时器导致系统内存泄漏的问题。
图2示意性示出了根据本发明实施例的定时器创建装置200的框图。
如图2所示,定时器创建装置200包括接口函数生成模块210、timeTarget对象生成模块220及活定时器创建模块230。
具体地,接口函数生成模块210,用于创建DYGoodTimer类,并在DYGoodTimer类中对外创建接口函数creatTimerWithInteval,该接口函数creatTimerWithInteval用于传递创建定时器所需的配置信息,该接口函数creatTimerWithInteval为类方法。
其中,该接口函数creatTimerWithInteval包括参数TimeInterval、target、selector、timePara及repeats,各参数的内容为穿件定时器所需的配置信息,TimeInterval的值为定时器的时间间隔,target的值为持有定时器的对象,selector的值为定时器执行的方法、timePara的值为执行的方法携带的内容,repeats的值为是否重复触发定时器。
timeTarget对象生成模块220,用于创建timeTarget对象,该timeTarget对象用于持有定时器,且该timeTarget对象被DYGoodTimer类引用,使得定时器不被控制器持有。
其中,该timeTarget对象包括三个变量:target变量、selector变量及timer变量。target变量和selector变量分别用于保存creatTimerWithInteval接口函数的selector参数和target参数传递的内容,即定时器的部分配置信息(执行的方法和执行方法的对象),timer变量的值即为timeTarget对象对定时器的引用关系,其引用关系由timer变量的值来确定,timer变量取值可为strong和weak,strong表示定时器被timeTarget对象强引用,weak表示定时器被timeTarget对象弱引用,所谓强引用表示持有对象,即该timeTarget对象持有定时器,在不需要定时器,需要手动将定时器释放掉,所谓弱引用表示不持有对象,即该timeTarget对象不持有定时器,在不需要定时器时,定时器会自动被赋值为nil。
定时器创建模块230,根据接口函数creatTimerWithInteval传递的配置信息创建定时器,并将该定时器赋值给timeTarget对象,使得所述定时器被timeTarget对象弱引用,该弱引用使得定时器主动被释放。
具体地,首先调用接口函数creatTimerWithInteval获取已经配置好的创建定时器所需的配置信息,并将这些配置信息传递给创建定时器调用的timerWithTimeInterval方法,该imerWithTimeInterval方法同样包括参数TimeInterval、selector、target、timePara及repeats,与接口函数creatTimerWithInteval参数是对应的,分别保存creatTimerWithInteval的参数中的内容。然后,获取系统的NSTimer对象,通过NSTimer对象调用timerWithTimeInterval方法创建定时器。当定时器创建完成以后,将创建的定时器赋值给timeTarget对象,并将timer变量的值设置为weak,这样创建的定时器被timeTarget对象弱引用,与强引用不同,弱引用不持有对象,弱引用的对象会自动被赋值为nil(空)即弱引用会制动指向nil,因此,该timeTarget对象不持有定时器,即DYGoodTimer类弱引用定时器,在使用定时器的过程中,就不需要手动停止或将定时器置为nil,能够及时主动释放定时器。
另外,定时器的本质是加入到了RunLoop的定时器列表中,从而随着运行循环来实现定时器的功能。因此,NSTimer除了构造,还需要加入RunLoop,在创建完定时器后,要将创建的定时器添加到系统的runloop中,这样才能保证创建的定时器能够正常运行。
应当理解,接口函数生成模块210、timeTarget对象生成模块220及活定时器创建模块230可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本发明的实施例,接口函数生成模块210、timeTarget对象生成模块220及活定时器创建模块230中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以以对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式的适当组合来实现。或者,接口函数生成模块210、timeTarget对象生成模块220及活定时器创建模块230中的至少一个可以至少被部分地实现为计算机程序模块,当该程序被计算机运行时,可以执行相应模块的功能。
本发明提供一种电子设备,如图3所示,该电子设备300包括处理器310和存储器320。该电子设备300可以执行根据图1所示的本发明实施例的方法。
具体地,处理器310例如可以包括通用微处理器、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器310还可以包括用于缓存用途的板载存储器。处理器310可以是用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
存储器320,例如可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,可读存储介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。可读存储介质的具体示例包括:磁存储装置,如磁带或硬盘(HDD);光存储装置,如光盘(CD-ROM);存储器,如随机存取存储器(RAM)或闪存;和/或有线/无线通信链路。
存储器320可以包括计算机程序321,该计算机程序321可以包括代码/计算机可执行指令,其在由处理器310执行时使得处理器310执行根据本公开实施例的方法或其任何变形。
计算机程序321可被配置为具有例如包括计算机程序模块的计算机程序代码。例如,在示例实施例中,计算机程序321中的代码可以包括至少一个程序模块,例如包括模块321A、模块321B、……。应当注意,模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器310执行时,使得处理器310可以执行根据本公开实施例的方法或其任何变形。
本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、射频信号等等,或者上述的任意合适的组合。
尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。
Claims (10)
1.一种定时器的创建方法,其特征在于,包括:
S1,创建引用类DYGoodTimer,所述引用类DYGoodTimer包括接口函数creatTimerWithInteval,该接口函数creatTimerWithInteval用于传递创建定时器所需的配置信息,所述接口函数creatTimerWithInteval为类方法,使得所述定时器不被控制器强持有;
S2,创建引用对象timeTarget,所述引用对象timeTarget用于引用所述定时器,所述引用对象timeTarget被所述引用类DYGoodTimer引用,使得所述定时器不被所述控制器持有;
S3,根据所述配置信息创建定时器,并将所述定时器赋值给所述引用对象timeTarget,使得所述定时器被所述引用对象timeTarget弱引用,所述弱引用使得所述定时器主动被释放。
2.根据权利要求1所述的定时器的创建方法,其特征在于,为所述接口函数creatTimerWithInteval设置参数:时间间隔TimeInterval、执行对象target、执行方法selector、携带信息timePara及重复执行repeats,所述各参数的内容为所述配置信息,其中,所述时间间隔TimeInterval的值为所述定时器的时间间隔,所述执行对象target的值为持有所述定时器的对象,所述执行方法selector的值为所述定时器执行的方法、所述携带信息timePara的值为所述执行的方法携带的内容,所述重复执行repeats的值为是否重复触发所述定时器。
3.根据权利要求1所述的定时器的创建方法,其特征在于,所述引用对象timeTarget包括引用强弱变量timer,将所述引用强弱变量timer变量的值设置为weak,使得所述引用对象timeTarget弱引用所述定时器。
4.根据权利要求1所述的定时器的创建方法,其特征在于,根据所述配置信息创建定时器,包括:
通过所述接口函数creatTimerWithInteval获取所述配置信息并传递给定时器创建方法timerWithTimeInterval的各参数;
调用所述定时器创建方法timerWithTimeInterval创建所述定时器。
5.根据权利要求1所述的定时器的创建方法,其特征在于,在上述操作S3之后还包括:
S4,将所述定时器添加到运行循环runloop中,使得所述定时器能够被运行。
6.根据权利要求2所述的定时器的创建方法,其特征在于,将所述执行方法selector设置为回调函数fire,在实现所述回调函数fire时,判断所述执行对象target是否存在:
若存在,则通过所述执行对象target完成对所述回调函数fire的调用;
若不存在,则所述定时器被释放。
7.根据权利要求5所述的定时器的创建方法,其特征在于,将所述定时器添加到运行循环runloop中,包括:
在所述运行循环runloop中为所述定时器指定添加的模式,使得所述定时器能够被运行。
8.一种定时器创建装置,其特征在于,所述装置包括:
接口函数生成模块,用于创建引用类DYGoodTimer,并在所述引用类DYGoodTimer中创建接口函数creatTimerWithInteval,该接口函数creatTimerWithInteval用于传递创建定时器所需的配置信息,所述接口函数creatTimerWithInteval为类方法;
引用对象timeTarget生成模块,用于创建引用对象timeTarget,所述引用对象timeTarget用于持有所述定时器,所述引用对象timeTarget被所述引用类DYGoodTimer引用,使得所述定时器不被控制器持有;
定时器创建模块,根据所述配置信息创建定时器,并将所述定时器赋值给所述引用对象timeTarget,使得所述定时器被所述引用对象timeTarget弱引用,所述弱引用使得所述定时器主动被释放。
9.一种电子设备,包括:
处理器;
存储器,其存储有计算机可执行程序,该程序在被所述处理器执行时,使得所述处理器执行如权利要求1-7中定时器的创建方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中定时器的创建方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811154632.8A CN110968147B (zh) | 2018-09-30 | 2018-09-30 | 定时器创建的方法、装置、电子设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811154632.8A CN110968147B (zh) | 2018-09-30 | 2018-09-30 | 定时器创建的方法、装置、电子设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110968147A CN110968147A (zh) | 2020-04-07 |
CN110968147B true CN110968147B (zh) | 2022-04-12 |
Family
ID=70028703
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811154632.8A Active CN110968147B (zh) | 2018-09-30 | 2018-09-30 | 定时器创建的方法、装置、电子设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110968147B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113342427B (zh) * | 2021-06-01 | 2022-08-16 | 青岛小鸟看看科技有限公司 | 程序控制方法及装置 |
CN113794740B (zh) * | 2021-11-16 | 2022-03-11 | 亿海蓝(北京)数据技术股份公司 | 定时器控制方法及系统、可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727352A (zh) * | 2009-12-15 | 2010-06-09 | 四川长虹电器股份有限公司 | 一种定时器的实现方法 |
CN107908567A (zh) * | 2017-11-27 | 2018-04-13 | 腾讯科技(深圳)有限公司 | 一种Java对象引用方法、装置和介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722432B (zh) * | 2011-03-29 | 2016-02-24 | 国际商业机器公司 | 追踪内存访问的方法和装置 |
-
2018
- 2018-09-30 CN CN201811154632.8A patent/CN110968147B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727352A (zh) * | 2009-12-15 | 2010-06-09 | 四川长虹电器股份有限公司 | 一种定时器的实现方法 |
CN107908567A (zh) * | 2017-11-27 | 2018-04-13 | 腾讯科技(深圳)有限公司 | 一种Java对象引用方法、装置和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110968147A (zh) | 2020-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6912583B2 (ja) | サービス処理方法および装置 | |
CN108388431B (zh) | 应用程序热更新的控制方法、装置、存储介质及移动终端 | |
CN108182131B (zh) | 监控应用运行状态的方法、装置、存储介质及电子设备 | |
CN104156225B (zh) | 一种安装包的下载方法、系统及服务器 | |
CN108874677B (zh) | 一种安卓终端及其测试方法和系统 | |
EP3364544B1 (en) | Front end module supporting device to device communication using plural frequency bands and electronic device including the same | |
CN108763060A (zh) | Android系统中Native层崩溃溯源方法、装置、存储介质及终端 | |
CN110968147B (zh) | 定时器创建的方法、装置、电子设备及介质 | |
US8695014B2 (en) | Distributed function execution for hybrid systems | |
CN108897575A (zh) | 电子设备的配置方法以及配置系统 | |
CN112799696B (zh) | 固件升级方法和相关设备 | |
CN111414265B (zh) | 一种调用系统资源的服务框架及方法 | |
CN110765394A (zh) | so文件加载方法、装置、存储介质及终端设备 | |
JP6584403B2 (ja) | Ic無線装置 | |
CN107682573B (zh) | 高并发外呼方法、系统、设备及存储介质 | |
US8041852B1 (en) | System and method for using a shared buffer construct in performance of concurrent data-driven tasks | |
CN108536267B (zh) | 信息处理方法和电子设备 | |
CN112711602B (zh) | 一种存储过程的运行方法、装置,数据库系统及存储介质 | |
CN115080068A (zh) | 资源文件的传输方法、装置、设备及存储介质 | |
CN112612474A (zh) | 产品移植方法、装置、存储介质和电子设备 | |
CN112083912A (zh) | 服务编排的中间结果处理方法、装置、设备及存储介质 | |
CN112035439A (zh) | 数据迁移方法及装置、计算机设备及计算机可读存储介质 | |
US20140323112A1 (en) | Electronic device and method for switching dual subscriber identity modules | |
CN109246177B (zh) | Android中异步通信工具设计方法 | |
CN103838615A (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 |