CN110046004A - 一种适配自动引用计数arc特性的方法、装置及电子设备 - Google Patents

一种适配自动引用计数arc特性的方法、装置及电子设备 Download PDF

Info

Publication number
CN110046004A
CN110046004A CN201910249833.4A CN201910249833A CN110046004A CN 110046004 A CN110046004 A CN 110046004A CN 201910249833 A CN201910249833 A CN 201910249833A CN 110046004 A CN110046004 A CN 110046004A
Authority
CN
China
Prior art keywords
arc
subclass
mrc
parent
address
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
Application number
CN201910249833.4A
Other languages
English (en)
Other versions
CN110046004B (zh
Inventor
冀睿哲
杨子斌
王仕俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing QIYI Century Science and Technology Co Ltd
Original Assignee
Beijing QIYI Century Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing QIYI Century Science and Technology Co Ltd filed Critical Beijing QIYI Century Science and Technology Co Ltd
Priority to CN201910249833.4A priority Critical patent/CN110046004B/zh
Publication of CN110046004A publication Critical patent/CN110046004A/zh
Application granted granted Critical
Publication of CN110046004B publication Critical patent/CN110046004B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种适配自动引用计数ARC的方法、装置及电子设备,该方法包括:在接收到用于调用手动引用计数MRC父类的触发信号的情况下,创建ARC子类,其中,所述ARC子类继承所述MRC父类的属性,且具备释放后引用计数置零的特性;向调用对象返回所述ARC子类。本发明提供的适配ARC的方法可以在接收到用于调用MRC父类的触发信号时,通过创建并返回继承所述MRC父类属性的ARC子类,使得MRC父类在被调用时也能够使用自动引用计数的特性,且该方式无需编程人员修改原有文件和进行测试,从而能够极大减少工作量,且还能够减少程序异常和崩溃的现象。

Description

一种适配自动引用计数ARC特性的方法、装置及电子设备
技术领域
本发明涉及通信技术领域,尤其涉及一种适配ARC特性的方法、装置及电子设备。
背景技术
内存是计算机中重要的部件之一,用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。
手动引用计数(Manual Reference Counting,简称MRC)是一种依赖编程人员手动释放对象内存的内存管理机制,即写代码调用release函数释放内存,当内存对象增多时,经常会由于编程人员忘记手动释放该对象,而造成程序内存泄露,当使用弱引用修饰符assign时在对象释放后还易产生野指针,使程序出现异常或崩溃。而自动引用计数(Automatic Reference Counting,简称ARC)是Objective-C程序的一种自动内存管理机制,运用ARC可以使编程人员基本不用考虑对象何时释放的问题,编译器会在合适的时间自动将其引用计数为零,从而将编程人员从繁琐的手工内存管理中释放出来,并同时减少了程序员犯错误的可能性,提高了系统运行的可靠性。
现有技术中,为了使以前使用MRC的老代码也能够适配ARC特性,以减少程序异常和崩溃,通常是通过修改编译选项,如指定原有MRC文件为ARC编译,并修改原有MRC文件的源代码,如删除ARC不支持的方法代码、替换部分方法代码和修改类型对象等,来使之适配ARC特性。
可见,由于这种方式需要修改原有文件,并且需要测试修改后的文件,以保证其能够正确适配ARC特性,从而存在修改工作量大且效率较低的问题。
发明内容
本发明实施例提供一种适配ARC的方法、装置及电子设备,以解决现有适配方式存在修改工作量大且效率较低的问题。
为解决上述技术问题,本发明是这样实现的:
第一方面,本发明实施例提供了一种适配ARC的方法,包括:
在接收到用于调用手动引用计数MRC父类的触发信号的情况下,创建ARC子类,其中,所述ARC子类继承所述MRC父类的属性,且具备释放后引用计数置零的特性;
向调用对象返回所述ARC子类。
第二方面,本发明实施例提供一种适配ARC的装置,包括:
创建模块,用于在接收到用于调用手动引用计数MRC父类的触发信号的情况下,创建ARC子类,其中,所述ARC子类继承所述MRC父类的属性,且具备释放后引用计数置零的特性;
返回模块,用于向调用对象返回所述ARC子类。
第三方面,本发明还提供一种电子设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述的适配ARC的方法的步骤。
第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述适配ARC方法中的步骤。
本发明实施例中,在接收到用于调用MRC父类的触发信号时,通过创建并返回继承所述MRC父类属性的ARC子类,使得MRC父类在被调用时也能够使用自动引用计数的特性,且该方式无需编程人员修改原有文件和进行测试,从而能够极大减少工作量,且还能够减少程序异常和崩溃的现象。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例描述中所需要使用的附图作简单地介绍。
图1是本发明实施例提供的一种适配ARC的方法的流程图;
图2是本发明实施例提供的另一种适配ARC的方法的流程图;
图3是本发明实施例提供的一种调用MRC父类的实现流程图;
图4是本发明实施例提供的一种调用MRC父类时创建ARC子类的应用举例示意图;
图5是本发明实施例提供的一种适配ARC的装置的结构示意图;
图6是本发明实施例提供的另一种适配ARC的装置的结构示意图;
图7是本发明实施例提供的另一种适配ARC的装置的结构示意图;
图8是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
参见图1,图1是本发明实施例提供的一种适配ARC方法的流程图,如图1所示,所述方法包括以下步骤:
步骤101、在接收到用于调用手动引用计数MRC父类的触发信号的情况下,创建自动引用计数ARC子类,其中,所述ARC子类继承所述MRC父类的属性,且具备释放后引用计数置零的特性。
上述MRC父类可以理解为使用手动引用计数的类对象,所述MRC父类可以包括属性和/或方法体,上述用于调用MRC父类的触发信号可以是调用对象为了获得所述MRC父类的某种属性或方法而发出的针对所述MRC父类的调用请求信号。
上述ARC子类可以理解为使用自动引用计数且继承所述MRC父类的属性的子类,即所述ARC子类为所述MRC父类的子类,其继承了所述MRC父类的属性,但不再使用手动引用计数。所述ARC子类在被调用对象调用后需要释放时,可以适配引用计数自动置零的特性,使得编程人员无需考虑对象何时释放的问题。
本实施例中,为使原有MRC文件(ARC技术未提出之前的代码文件)也能使用ARC特性,可以通过创建一个继承原有MRC父类属性但又具备ARC特性的子类,来给调用对象使用。因此,该步骤中,在接收到用于调用MRC父类的触发信号时,可以创建ARC子类,以向调用对象返回所创建的ARC子类,使之在调用过程中能够适配自动引用计数。需说明的是,在编译时,可以指定所述ARC子类的编译方式为ARC编译。
其中,所述创建ARC子类可以是基于所述MRC父类,创建所述MRC父类的子类,并修改所创建的子类的修饰符属性,使得所创建的子类能够适配ARC特性,或者,所述创建ARC子类也可以是直接调用ARC子类创建方法,创建继承所述MRC父类属性的ARC子类,即创建所述ARC子类时,其修饰符属性已被重写。
例如,现有MRC类对象一般使用assign修饰符,使用这种修饰符的类对象在释放后,指针不会被自动置空,从而易产生野指针,进而引发程序崩溃问题,而ARC类对象则一般使用weak修饰符,使用这种修饰符的类对象在释放后,指针会被自动置空,从而不会产生野指针问题,因此,在创建所述MRC父类的ARC子类时,可以将所述ARC子类的修饰符属性写为weak。
可选的,所述ARC子类的修饰符为第一修饰符或第二修饰符,其中,所述第一修饰符用于指示所述ARC子类的引用属性为强引用,所述第二修饰符用于指示所述ARC子类的引用属性为弱引用,所述强引用表示引用时持有对象,所述弱引用表示引用时不持有对象且对象释放后指针被置空。
该实施方式中,所述ARC子类的修饰符为第一修饰符或第二修饰符,即在创建所述ARC子类时,其修饰符属性被写为所述第一修饰符或所述第二修饰符,其中,所述第一修饰符用于指示所述ARC子类的引用属性为强引用strong,所述第二修饰符用于指示所述ARC子类的引用属性为弱引用weak,所述强引用strong表示在调用者在引用对象时持有对象,而所述弱引用weak表示调用者在引用对象时不持有对象且对象释放后指针被置空,但使用这两种修饰符的子类均能适配释放后引用计数置零的特性,从而保证所述ARC子类能够使用自动引用计数。
为防止在调用所述ARC子类的过程中出现野指针而导致程序崩溃的问题,所述ARC子类的修饰符可以为弱引用weak,这样,在调用对象释放所述ARC子类后,指针可以被自动置空,从而不会产生野指针问题。
需说明的是,当两个不同的对象各有一个强引用指向对方时就会造成循环引用,从而会导致对象无法释放,因此,在会造成循环引用时,所述ARC子类也可以使用弱引用weak修饰符,以避免出现对象无法释放的问题。
步骤102、向调用对象返回所述ARC子类。
在创建所述ARC子类后,便可以响应于调用对象发出的调用请求,向所述调用对象返回所述ARC子类,以使所述调用对象从所述ARC子类中获得所需的信息,如属性、方法体等,进而实现对应的功能。
例如,在运行某应用程序的过程中,该应用程序的某个模块需要调用某MRC父类时,将向该应用程序发送用于请求调用该MRC父类的触发信号,以获得该MRC父类的属性信息,该应用程序在接收到调用请求信号后,将创建继承该MRC父类属性的ARC子类,并向该模块返回所创建的ARC子类,从而该模块便能从返回的ARC子类中获得所需的属性信息。
需说明的是,本实施例可以是应用于使用ARC技术进行内存管理的操作系统中,如iOS系统等。
本实施例中的适配ARC的方法,在接收到用于调用MRC父类的触发信号时,通过创建并返回继承所述MRC父类属性的ARC子类,使得MRC父类在调用时也能够使用自动引用计数的特性,且该方式无需编程人员修改原有文件和进行测试,从而能够极大减少工作量,且还能够减少程序异常和崩溃的现象。
参见图2,图2是本发明实施例提供的另一种适配ARC方法的流程图,本实施例在图1所示的实施例的基础上,追加了将MRC父类的创建方法的地址替换为ARC子类的创建方法的地址的步骤,从而无需编程人员手动创建ARC子类,而是可以。如图2所示,所述方法包括以下步骤:
步骤201、将手动引用计数MRC父类的创建方法的地址替换为自动引用计数ARC子类的创建方法的地址。
本实施例中,为保证在接收到用于调用手动引用计数MRC父类的触发信号时,能够调用ARC子类的创建方法来完成ARC子类的创建,可以在发生调用之前完成MRC父类的创建方法与ARC子类的创建方法的替换,即将MRC父类的创建方法的地址替换为ARC子类的创建方法的地址,使得在调用MRC父类的创建方法时,实际调用的是ARC子类的创建方法,其中,所述ARC子类的创建方法可以由编程人员预先写好对应的实现代码,并存放于特定地址。
例如,写有MRC父类的创建方法的代码所在地址为0x12,写有ARC子类的创建方法的代码所在地址为0x34,在程序初始化时,便可将所述MRC父类的创建方法的地址替换为所述ARC子类的创建方法的地址,即将地址0x12替换为0x34。
可选的,所述步骤201包括:
通过钩子Hook函数获取MRC父类的创建方法的地址;
将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
Hook技术又叫钩子函数,是指在没有调用该函数之前,钩子程序就先捕获消息,即钩子函数先获得控制权,这时钩子函数可以加工处理(改变)该函数的执行行为。因此,该实施方式中,可以采用Hook技术来完成所述MRC父类的创建方法的地址与ARC子类的创建方法的地址的替换,具体为通过Hook函数获取MRC父类的创建方法的地址,以对所述MRC父类的创建方法的地址进行修改,然后将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
这样,该实施方式中,通过Hook函数可以快捷地将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址,进而在接收到调用MRC父类的请求时,可以创建对应的ARC子类并返回给调用对象,使得编程人员无需编写和修改过多的代码。
可选的,所述将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址,包括:
调用方法替换Method Swizzling模块,将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
该实施方式中,在对所述MRC父类的创建方法的地址进行替换时,可以采用MethodSwizzling技术实现,即调用Method Swizzling模块,将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。具体地,为了确保系统安全,可以在加载类的时候(即main函数之前,调用类的+load方法时),便调用Method Swizzling模块,交换所述MRC父类的创建方法的地址与所述ARC子类的创建方法的地址,使得所述MRC父类的创建方法的地址被替换为所述ARC子类的创建方法的地址。
其中,所述Method Swizzling模块可以理解为由实现所述MRC父类的创建方法的地址与所述ARC子类的创建方法的地址的替换功能的代码组成的软件模块。
需说明的是,Method Swizzling为iOS系统中特有的方法替换技术,当应用于iOS系统中采用C++语言编写的应用程序时,还可以采用Fishhook工具来实现所述MRC父类的创建方法的地址与所述ARC子类的创建方法的地址的替换。
这样,该实施方式中,通过调用Method Swizzling模块,可以在程序初始化运行时便快速将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址,进而实现在接收到调用MRC父类的请求时,创建对应的ARC子类并返回给调用对象。
步骤202、在接收到用于调用MRC父类的触发信号的情况下,按照所述ARC子类的创建方法的地址,调用所述ARC子类的创建方法,创建所述ARC子类,其中,所述ARC子类继承所述MRC父类的属性,且具备释放后引用计数置零的特性。
现有技术中,在接收到用于调用MRC父类的触发信号后,通常是按照MRC父类的创建方法的地址,调用MRC父类的创建方法,完成所述MRC父类的创建,但本实施例中,由于步骤201中已对MRC父类的创建方法的地址进行了替换,因此,在接收到所述用于调用MRC父类的触发信号后,将按照替换后的地址,即所述ARC子类的创建方法的地址,调用所述ARC子类的创建方法,完成所述ARC子类的创建。
步骤203、向调用对象返回所述ARC子类。
该步骤的具体实施方式可以参见图1所示的方法实施例中步骤102的实施方式,为避免重复,这里不再赘述。
本实施例中,通过在发生对象调用前便将MRC父类的创建方法的地址替换为ARC子类的创建方法的地址,使得在接收到用于调用MRC父类的触发信号时,可以直接按照ARC子类的创建方法的地址,调用ARC子类的创建方法,完成ARC子类的创建,而无需编程人员预先在MRC父类中创建对应的ARC子类。另外,本实施例在图1所示的实施例的基础上还增加了多种可选的实施方式,这些可选的实施方式可以相互结合实现,也可以单独实现,且都能达到无需编程人员修改原有文件和进行测试,从而能够极大减少工作量,且还且能够减少程序异常和崩溃的现象的技术效果。
下面结合图3和图4,对本发明实施例的实现方式进行举例说明。
参见图3,调用MRC父类的实现流程包括如下步骤:
步骤301、在加载类的过程中,调用Method Swizzling模块,将MRC父类的创建方法替换为ARC子类的创建方法。
步骤302、调用对象请求调用所述MRC父类的创建方法。
步骤303、调用所述ARC子类的创建方法,创建继承所述MRC父类属性的ARC子类,其中,所述ARC子类的修饰符属性被写为weak属性。
步骤304、向调用对象返回所创建的所述ARC子类。
步骤305、调用对象获得拥有ARC特性的所述ARC子类,调用对象在释放所述ARC子类后,指针将被自动置空。
参见图4,原有MRC父类包括:@property(assign)id property1;@property(assign)id property2;@property(assign)id property3;即原有MRC父类的修饰符属性为assign。
当调用对象请求调用该MRC父类时,可以通过调用iOS系统中的Method Swizzling模块,将MRC父类创建方法替换为ARC子类的创建方法,使得创建的对象为ARC子类。
创建后的ARC子类为:@property(weak)id property1;@property(weak)idproperty2;@property(weak)id property3,可见,创建后的ARC子类的修饰符属性已被重写为weak。
参见图5,图5是本发明实施例提供的一种适配ARC的装置的结构示意图,如图5所示,适配ARC的装置500包括:
创建模块501,用于在接收到用于调用手动引用计数MRC父类的触发信号的情况下,创建ARC子类,其中,所述ARC子类继承所述MRC父类的属性,且具备释放后引用计数置零的特性;
返回模块502,用于向调用对象返回所述ARC子类。
可选的,所述ARC子类的修饰符为第一修饰符或第二修饰符,其中,所述第一修饰符用于指示所述ARC子类的引用属性为强引用,所述第二修饰符用于指示所述ARC子类的引用属性为弱引用,所述强引用表示引用时持有对象,所述弱引用表示引用时不持有对象且对象释放后指针被置空。
可选的,如图6所示,适配ARC的装置500还包括:
替换模块503,用于将MRC父类的创建方法的地址替换为ARC子类的创建方法的地址;
创建模块501用于在接收到用于调用手动引用计数MRC父类的触发信号的情况下,按照所述ARC子类的创建方法的地址,调用所述ARC子类的创建方法,创建所述ARC子类。
可选的,如图7所示,替换模块503包括:
获取单元5031,用于通过钩子Hook函数获取MRC父类的创建方法的地址;
替换单元5032,用于将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
可选的,替换单元5032用于调用方法替换Method Swizzling模块,将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
适配ARC的装置500能够实现图1至图2的方法实施例中的各个过程,为避免重复,这里不再赘述。本发明实施例的适配ARC的装置500可以在接收到用于调用MRC父类的触发信号时,通过创建并返回继承所述MRC父类属性的ARC子类,使得MRC父类在调用时也能够使用自动引用计数的特性,且该方式无需编程人员修改原有文件和进行测试,从而能够极大减少工作量,且还能够减少程序异常和崩溃的现象。
本发明实施例还提供一种电子设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述任一方法实施例的适配ARC的方法的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述适配ARC的方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
参见图8,图8是本发明又一实施提供的电子设备的结构图,如图8所示,电子设备包括:处理器801、存储器802及存储在所述存储器802上并可在所述处理器上运行的计算机程序,所述电子设备中的各个组件通过总线接口803耦合在一起,所述计算机程序被所述处理器801执行时实现如下步骤:
在接收到用于调用手动引用计数MRC父类的触发信号的情况下,创建ARC子类,其中,所述ARC子类继承所述MRC父类的属性,且具备释放后引用计数置零的特性;
向调用对象返回所述ARC子类。
可选的,所述ARC子类的修饰符为第一修饰符或第二修饰符,其中,所述第一修饰符用于指示所述ARC子类的引用属性为强引用,所述第二修饰符用于指示所述ARC子类的引用属性为弱引用,所述强引用表示引用时持有对象,所述弱引用表示引用时不持有对象。
可选的,所述计算机程序被所述处理器801执行时还用于:
将MRC父类的创建方法的地址替换为ARC子类的创建方法的地址;
按照所述ARC子类的创建方法的地址,调用所述ARC子类的创建方法,创建所述ARC子类。
可选的,所述计算机程序被所述处理器801执行时还用于:
通过钩子Hook函数获取MRC父类的创建方法的地址;
将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
可选的,所述计算机程序被所述处理器801执行时还用于:
调用方法替换Method Swizzling模块,将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (12)

1.一种适配自动引用计数ARC的方法,其特征在于,包括:
在接收到用于调用手动引用计数MRC父类的触发信号的情况下,创建自动引用计数ARC子类,其中,所述ARC子类继承所述MRC父类的属性,且具备释放后引用计数置零的特性;
向调用对象返回所述ARC子类。
2.根据权利要求1所述的方法,其特征在于,所述ARC子类的修饰符为第一修饰符或第二修饰符,其中,所述第一修饰符用于指示所述ARC子类的引用属性为强引用,所述第二修饰符用于指示所述ARC子类的引用属性为弱引用,所述强引用表示引用时持有对象,所述弱引用表示引用时不持有对象且对象释放后指针被置空。
3.根据权利要求1或2所述的方法,其特征在于,所述在接收到用于调用MRC父类的触发信号的情况下,创建ARC子类之前,所述方法还包括:
将MRC父类的创建方法的地址替换为ARC子类的创建方法的地址;
所述创建ARC子类,包括:
按照所述ARC子类的创建方法的地址,调用所述ARC子类的创建方法,创建所述ARC子类。
4.根据权利要求3所述的方法,其特征在于,所述将MRC父类的创建方法的地址替换为ARC子类的创建方法的地址,包括:
通过钩子Hook函数获取MRC父类的创建方法的地址;
将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
5.根据权利要求4所述的方法,其特征在于,所述将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址,包括:
调用方法替换Method Swizzling模块,将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
6.一种适配ARC的装置,其特征在于,包括:
创建模块,用于在接收到用于调用手动引用计数MRC父类的触发信号的情况下,创建ARC子类,其中,所述ARC子类继承所述MRC父类的属性,且具备释放后引用计数置零的特性;
返回模块,用于向调用对象返回所述ARC子类。
7.根据权利要求6所述的装置,其特征在于,所述ARC子类的修饰符为第一修饰符或第二修饰符,其中,所述第一修饰符用于指示所述ARC子类的引用属性为强引用,所述第二修饰符用于指示所述ARC子类的引用属性为弱引用,所述强引用表示引用时持有对象,所述弱引用表示引用时不持有对象。
8.根据权利要求6或7所述的装置,其特征在于,所述适配ARC的装置还包括:
替换模块,用于将MRC父类的创建方法的地址替换为ARC子类的创建方法的地址;
所述创建模块用于在接收到用于调用手动引用计数MRC父类的触发信号的情况下,按照所述ARC子类的创建方法的地址,调用所述ARC子类的创建方法,创建所述ARC子类。
9.根据权利要求8所述的装置,其特征在于,所述替换模块包括:
获取单元,用于通过钩子Hook函数获取MRC父类的创建方法的地址;
替换单元,用于将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
10.根据权利要求9所述的装置,其特征在于,所述替换单元用于调用方法替换MethodSwizzling模块,将所述MRC父类的创建方法的地址替换为ARC子类的创建方法的地址。
11.一种电子设备,其特征在于,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至5中任一项所述的适配ARC的方法的步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5中任一项所述的适配ARC的方法中的步骤。
CN201910249833.4A 2019-03-29 2019-03-29 一种适配自动引用计数arc特性的方法、装置及电子设备 Active CN110046004B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910249833.4A CN110046004B (zh) 2019-03-29 2019-03-29 一种适配自动引用计数arc特性的方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910249833.4A CN110046004B (zh) 2019-03-29 2019-03-29 一种适配自动引用计数arc特性的方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN110046004A true CN110046004A (zh) 2019-07-23
CN110046004B CN110046004B (zh) 2022-09-02

Family

ID=67275613

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910249833.4A Active CN110046004B (zh) 2019-03-29 2019-03-29 一种适配自动引用计数arc特性的方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN110046004B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102207903A (zh) * 2010-03-29 2011-10-05 微软公司 用于单元测试的自动重定向方法调用
US20140109037A1 (en) * 2009-10-14 2014-04-17 Vermeg Sarl Automated Enterprise Software Development
CN105224632A (zh) * 2015-09-24 2016-01-06 四川长虹电器股份有限公司 Xbrl技术框架中将引擎模型转换为页面模型的方法
CN107924326A (zh) * 2016-07-12 2018-04-17 甲骨文国际公司 对经更新的类型的迁移方法进行覆盖
CN108319504A (zh) * 2018-03-19 2018-07-24 武汉斗鱼网络科技有限公司 内存占用优化方法、装置及可读存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140109037A1 (en) * 2009-10-14 2014-04-17 Vermeg Sarl Automated Enterprise Software Development
CN102207903A (zh) * 2010-03-29 2011-10-05 微软公司 用于单元测试的自动重定向方法调用
CN105224632A (zh) * 2015-09-24 2016-01-06 四川长虹电器股份有限公司 Xbrl技术框架中将引擎模型转换为页面模型的方法
CN107924326A (zh) * 2016-07-12 2018-04-17 甲骨文国际公司 对经更新的类型的迁移方法进行覆盖
CN108319504A (zh) * 2018-03-19 2018-07-24 武汉斗鱼网络科技有限公司 内存占用优化方法、装置及可读存储介质

Also Published As

Publication number Publication date
CN110046004B (zh) 2022-09-02

Similar Documents

Publication Publication Date Title
US8756591B2 (en) Generating compiled code that indicates register liveness
CN106649084B (zh) 函数调用信息的获取方法及装置、测试设备
CN110309051B (zh) 管理测试用例的方法、系统、设备及存储介质
EP2600246B1 (en) Batch processing of business objects
EP3504626A1 (en) Multi-layer test suite generation
US11010276B2 (en) Configurable code fingerprint
US10671506B2 (en) Evaluating fairness in devices under test
US20190377612A1 (en) VCPU Thread Scheduling Method and Apparatus
CN107590144A (zh) 一种文件存储方法和终端
CN109150642A (zh) 应用内存错误检测方法、检测装置及存储介质
CN106569874A (zh) 存储设备的操作方法及物理服务器
US10133654B1 (en) Firmware debug trace capture
US9703905B2 (en) Method and system for simulating multiple processors in parallel and scheduler
CN110278101A (zh) 一种资源管理方法及设备
CN110569154A (zh) 一种芯片接口功能测试方法、系统、终端及存储介质
CN112333246B (zh) 一种ABtest实验方法、装置、智能终端及存储介质
CN110046004A (zh) 一种适配自动引用计数arc特性的方法、装置及电子设备
CN110413437A (zh) 网络命名空间异常处理方法、装置、设备及可读存储介质
CN106775456B (zh) 一种数据处理方法、装置及系统
CN108197029A (zh) 一种获取进程信息的方法和设备
CN115576766A (zh) 闪存管理算法调试方法、系统、设备和可读存储介质
CN109086156A (zh) 一种服务器除错方法、装置、设备及计算机可读存储介质
CN110990018B (zh) 一种嵌入式系统的编译方法及编译系统
CN112764729A (zh) 应用软件开发方法、装置、计算机设备及可读存储介质
CN112256243B (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