一个Swift中deinit方法中设置断点不生效的问题
2018-11-11 本文已影响2人
link_hui
在iOS开发中,有时候我们为了调试我们写的页面代码是否有内存泄漏,会在ViewController的释放方法中添加一个断点,在退出的时候看看是否会执行到。
Swift语言,在ViewController添加一个空的deinit方法,退出页面的时候,却发现断点是不生效的。
![](https://img.haomeiwen.com/i5592145/fbfb9dbbaf00aad5.png)
碰到这种情况,以为是发生内存泄漏了。却怎么也排查不到原因。
由于项目是混编的,无奈之下再试试Objective-C中是否有问题,因为之前也是一直这么做的,却发现Objective-C中一个空的dealloc方法。退出页面的时候,断点是生效的。
![](https://img.haomeiwen.com/i5592145/371b1bd084b8f794.png)
然而,在deinit方法中增加一个打印语句,设置的断点就能够断住了。
![](https://img.haomeiwen.com/i5592145/a4cef0152d3a51dc.png)
再查资料,发现是Swift编译有优化,对空的deinit方法不生效。要想deinit方法中的断点生效,必须写一个执行语句,比如增加一个print打印方法。
![](https://img.haomeiwen.com/i5592145/f023d1642b8de048.png)