找到内存泄漏的根源。

我真的很喜欢Emilien Stremsdoerfer的内存泄漏文章,并想在结尾部分进行扩展。 您可以启用称为Malloc堆栈日志的功能,这将使Xcode内存调试器能够找到导致内存泄漏的确切代码行。 去年在Visual Debugging WWDC会话中几乎没有涉及到这一点,我认为我应该与错过它的人分享。

启用Malloc堆栈日志记录:

首先,您需要启用Malloc堆栈日志记录。 这是每个scheme都启用的功能,因此您需要在用于运行/调试项目的任何scheme上启用它。 通常,您将需要在Run scheme执行此操作:

现在,您将拥有一个升级的内存调试器。 如果在应用程序运行时单击可视调试器,则可以浏览内存泄漏,如下所示:

都是一样的,但是如果您查看右侧面板,现在就可以直接跳到导致泄漏的行:

我必须重申Emilien Stremsdoerfer关于内存调试器有点误导的观点。 在我的特定情况下,问题的根源最终是来自缺乏弱声明的第三方框架的委托-Xcode并未将其列为泄漏。 但是,由于有了内存图,我得以对其进行跟踪并提交了框架的PR。

我还要提及的是,在调试内存泄漏时应打开和关闭此选项。 启用Malloc堆栈日志记录后,使用调试器逐步调试时,某些属性未完全记录下来,这会使调试代码变得困难。

祝您调试愉快! 👍🏼

www.daniel-williams.co