一种关于iOS应用程序内存泄漏的即时检测方法技术

技术编号:21184290 阅读:22 留言:0更新日期:2019-05-22 14:59
本发明专利技术名称为“一种关于iOS应用程序内存泄漏的即时检测方法”。通过此工具方法的引进使用后,就可以在日常的开发,调试业务逻辑的过程中自动地发现并警告内存泄漏。开发者无需打开instrument等工具,也无需为了找内存泄漏而去跑额外的流程。并且,由于开发者是在修改代码之后开展业务逻辑就能发现内存泄漏的,这使得开发者能够很快地意识到是哪里代码写得问题。这种及时的内存泄漏的发现在很大的程度上降低了修复内存的成本。

An Instant Detection Method for Memory Leakage in iOS Applications

The invention is called \an instant detection method for memory leak of iOS application program\. After the introduction and use of this tool and method, memory leaks can be automatically detected and warned in the process of daily development and debugging business logic. Developers do not need to open tools such as instrumentation or run additional processes to find memory leaks. Moreover, because developers can discover memory leaks by developing business logic after modifying code, developers can quickly realize where the code is written. This timely discovery of memory leaks greatly reduces the cost of repairing memory.

【技术实现步骤摘要】
一种关于iOS应用程序内存泄漏的即时检测方法
本专利技术涉及涉及信息安全领域。
技术介绍
目前,当前应用的内存泄漏检测主要使用的工具是instrument。通过其中的Leaks/Allocatons来进行监测,但是在实际使用中却存在着各种问题以及不便。Leaks的问题:其中Leakedmemory和Abandoned都属于应该释放而没有释放的内存,都是内存泄漏,而Leaks工具只负责检测Leakedmemory,而不管Abandonedmemory。在MRC时代Leakedmemory很常见,因为很容易忘了调用release,但是ARC时代更常见的内存泄漏是循环引用导致的Abandonedmemory,Leaks工具查不出这类内存泄漏,应用有限。Allocations的问题:对于Abandonedmemory,可以用instrument的Allocations检测出来。检测方法是用Markgeneration方式,当你每次点击Markgeneration时,Allocations会生成当前APP的内存快照,而且Allocations会记录从上回内存快照这个时间段内,新分配的内存信息。需要使用非常简单,具有无侵入性、可以构建泄漏堆栈、有白名单机制、扩展性、其他的一些特殊处理等特性,可以在应用开发中快速找到80%的内存泄漏,符合敏捷开发的理念。
技术实现思路
苹果官方提供的检测方法比较零散,无法有效统一,且每种方法只能检测到相应的问题,使用较复杂,且对于庞大的项目工程而言,运行检测工具耗时较多,大大降低了开发效率。本工具方法可有效检测内存泄漏问题,以便开发人员将更多精力用于研发生产。鉴于现有技术的缺陷,本专利技术创造提出一种关于iOS应用程序内存泄漏的即时检测方法。采用的技术解决方案如下:一种关于iOS应用程序内存泄漏的即时检测方法,其工作步骤如下:步骤1:寻找释放点,通过MethodSwizzling系统类的方法添加额外的功能;步骤2:追踪泄漏,建立白名单机制,通过判断class是否在白名单中,来决定是否安全;步骤3:报告泄漏对象,当进入到对应的assertNotDealloc方法,表明该对象极有可能泄漏,通过alert弹出提示框;步骤4:构建堆栈信息,通过监听willReleaseChildren和willReleaseChild方法。递归遍历子对象,然后将父对象classname加上子对象classname,一步步构造出一个viewstack;步骤5:查找环引用,FBRetainCycleDetector基于外部传入的object以及查找深度,进行深度优先遍历强引用属性,和动态运行时关联的强引用属性,同时将这些关联对象的地址放入objectSet(set)的集合中,将对象信息计入objectOnPath集合中(set),并且将对象将对象在对象栈stack中存储一份,来查找对应环。有益效果:与现有技术相比,本专利技术创造的优点在于:优点1:有效查找Leakedmemory和Abandoned;优点2:能够在开发过程中及时发现leak,可将开发与测试并发进行;优点3:使用简单,操作性高,大大提高开发效率。优点4:符合敏捷开发设计理念。附图说明:图1为本专利技术创造的流程图;具体实施方式:下面结合附图1,对本专利技术创造做进一步阐述:一种关于iOS应用程序内存泄漏的即时检测方法,其具体实施例如下:通过替换viewDidDisappear、viewWillAppear、dismissViewControllerAnimated:completion:方法来跟踪一个modalviewcontroller的释放;UINavigationController方面,hook了pushViewController:animated、popViewControllerAnimated:、popToViewController:animated等方法跟踪释放。在NSObject的MemoryLeak分类里面对willDealloc方法做监听,如果当前对象在发送action则忽略,之后设置一个weak指针,在调用dispatch_after在2秒后调用assertNotDealloc方法,如果还没释放那么会进入此方法,如果没有释放,该方法默认进不去。构造了一个MLeakedObjectProxy对象,并将其加入到leakedObjectPtrs集合中,弹出alert框,将此对象指针传给FBRetainCycleDeteCtor来确定循环引用在哪里。并且在屏幕打印堆栈信息。分类中新加willReleaseChildren和willReleaseChild方法,用于向对象中的子类对象调用释放方法,出现泄漏则直接打印此对象的viewstack即可。根据得到的引用报告,进行正常的泄漏代码修复工作。本文档来自技高网...

【技术保护点】
1.一种关于iOS应用程序内存泄漏的即时检测方法 ,其工作步骤如下:步骤1:寻找释放点,通过Method Swizzling系统类的方法添加额外的功能;步骤2:追踪泄漏,建立白名单机制,通过判断class是否在白名单中,来决定是否安全;步骤3:报告泄漏对象,当进入到对应的assertNotDealloc方法,表明该对象极有可能泄漏,通过alert弹出提示框;步骤4:构建堆栈信息,通过监听willReleaseChildren和willReleaseChild方法;递归遍历子对象,然后将父对象class name加上子对象class name,一步步构造出一个view stack;步骤5:查找环引用,FBRetainCycleDetector基于外部传入的object以及查找深度,进行深度优先遍历强引用属性,和动态运行时关联的强引用属性,同时将这些关联对象的地址放入objectSet(set)的集合中,将对象信息计入objectOnPath集合中(set),并且将对象将对象在对象栈stack中存储一份,来查找对应环。

【技术特征摘要】
1.一种关于iOS应用程序内存泄漏的即时检测方法,其工作步骤如下:步骤1:寻找释放点,通过MethodSwizzling系统类的方法添加额外的功能;步骤2:追踪泄漏,建立白名单机制,通过判断class是否在白名单中,来决定是否安全;步骤3:报告泄漏对象,当进入到对应的assertNotDealloc方法,表明该对象极有可能泄漏,通过alert弹出提示框;步骤4:构建堆栈信息,通过监听willReleaseChildren和willReleaseChild...

【专利技术属性】
技术研发人员:傅涛王力郑轶钱勇
申请(专利权)人:江苏博智软件科技股份有限公司
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1