一个Swift中deinit方法中设置断点不生效的问题

在iOS开发中,有时候我们为了调试我们写的页面代码是否有内存泄漏,会在ViewController的释放方法中添加一个断点,在退出的时候看看是否会执行到。

Swift语言,在ViewController添加一个空的deinit方法,退出页面的时候,却发现断点是不生效的。


一个Swift中deinit方法中设置断点不生效的问题_第1张图片

碰到这种情况,以为是发生内存泄漏了。却怎么也排查不到原因。

由于项目是混编的,无奈之下再试试Objective-C中是否有问题,因为之前也是一直这么做的,却发现Objective-C中一个空的dealloc方法。退出页面的时候,断点是生效的。


一个Swift中deinit方法中设置断点不生效的问题_第2张图片

然而,在deinit方法中增加一个打印语句,设置的断点就能够断住了。


一个Swift中deinit方法中设置断点不生效的问题_第3张图片

再查资料,发现是Swift编译有优化,对空的deinit方法不生效。要想deinit方法中的断点生效,必须写一个执行语句,比如增加一个print打印方法。


一个Swift中deinit方法中设置断点不生效的问题_第4张图片

参考:
Deinit not called on a UIViewController, but Dealloc is

你可能感兴趣的:(一个Swift中deinit方法中设置断点不生效的问题)