背景
公司新的项目告一段落开始进行优化,进行一次内存泄漏的检查
使用的是由腾讯微信阅读团队开源的MLeaksFinder工具,可以在调试阶段即时地发现项目中内存泄漏的情况,主要面向OC对象未释放的问题
发现UISwitch问题
在一个业务ViewController
显示UISwitch
未释放的问题,经过多次检查和排除后均未找到原因,开始怀疑MleaksFinder
的准确性时,通过自定义一个UISwitch
的子类重写dealloc
方法来确认,发现使用确实未调用dealloc
方法。
接着从网上找到一个可靠的解释,来自RxSwift
一个issue的回答,说明使用Instruments-Leaks工具找出了UISwitch内部属性retain了UISwitch造成的循环引用,如下图:
![](https://img.haomeiwen.com/i6245111/30d3624266b13d89.jpg)
![](https://img.haomeiwen.com/i6245111/899c9c2a73de9d05.jpg)
此外实测iOS9和iOS8下可顺利释放。
这显然是UIKit自身的bug,已经有老司机上报了。
感谢一起调试的Alan和Luffy小伙伴
demo
\加我微信沟通。
![](https://img.haomeiwen.com/i6245111/2cb11192e9612786.png)
网友评论