[iOS][OC] 内存泄漏检查的意外发现:在iOS10下UISwitch自身不释放的bug-(附demo)

背景

公司新的项目告一段落开始进行优化,进行一次内存泄漏的检查
使用的是由腾讯微信阅读团队开源的MLeaksFinder工具,可以在调试阶段即时地发现项目中内存泄漏的情况,主要面向OC对象未释放的问题

发现UISwitch问题

在一个业务ViewController显示UISwitch未释放的问题,经过多次检查和排除后均未找到原因,开始怀疑MleaksFinder的准确性时,通过自定义一个UISwitch的子类重写dealloc方法来确认,发现使用确实未调用dealloc方法。

接着从网上找到一个可靠的解释,来自RxSwift一个issue的回答,说明使用Instruments-Leaks工具找出了UISwitch内部属性retain了UISwitch造成的循环引用,如下图:

此外实测iOS9和iOS8下可顺利释放。
这显然是UIKit自身的bug,已经有老司机上报了。

感谢一起调试的Alan和Luffy小伙伴

demo

demo 地址

\加我微信沟通。


你可能感兴趣的:([iOS][OC] 内存泄漏检查的意外发现:在iOS10下UISwitch自身不释放的bug-(附demo))