找到内存泄漏的根源。
我真的很喜欢Emilien Stremsdoerfer的内存泄漏文章,并想在结尾部分进行扩展。 您可以启用称为Malloc堆栈日志的功能,这将使Xcode内存调试器能够找到导致内存泄漏的确切代码行。 去年在Visual Debugging WWDC会话中几乎没有涉及到这一点,我认为我应该与错过它的人分享。
启用Malloc堆栈日志记录:
首先,您需要启用Malloc堆栈日志记录。 这是每个scheme
都启用的功能,因此您需要在用于运行/调试项目的任何scheme
上启用它。 通常,您将需要在Run
scheme
执行此操作:
现在,您将拥有一个升级的内存调试器。 如果在应用程序运行时单击可视调试器,则可以浏览内存泄漏,如下所示:
都是一样的,但是如果您查看右侧面板,现在就可以直接跳到导致泄漏的行:
我必须重申Emilien Stremsdoerfer关于内存调试器有点误导的观点。 在我的特定情况下,问题的根源最终是来自缺乏弱声明的第三方框架的委托-Xcode并未将其列为泄漏。 但是,由于有了内存图,我得以对其进行跟踪并提交了框架的PR。
我还要提及的是,在调试内存泄漏时应打开和关闭此选项。 启用Malloc堆栈日志记录后,使用调试器逐步调试时,某些属性未完全记录下来,这会使调试代码变得困难。
祝您调试愉快! 👍🏼
www.daniel-williams.co