IOS应用内存泄露问题的检测及定位
问题描述:最近新开发了一个Puzzle项目,场景内容包含35个,发现每次选择最多块数的时候会出现崩溃bug,Xcode的Bug日志也不太能看出来问题所在,直到看到“Terminated due to memory issue”
才发现是内存泄露问题导致。
最大的问题就是无法定位到内存泄露的具体位置,想改也无从下手,经过不断的查找最终找到了如何检测内存泄露以及准确定位到内存泄露的位置。
工具——Instruments
开发工具:Xcode
查找位置:
1.Xcode->OpenDevelper Tool->Instruments
2.Product->Profile
两种方法都可以进入下面场景,直接选择Leaks即可
3.除了上述两种方法还有一种方法,即打开之后可以运行自己的项目了,在Navigator栏的Debug Navigator (调试管理器)下,点开Memory一项,在MemoryReport区右上角点击Profile Instruments如下图
弹出对话话选择transfer/Profile(Xcode版本不同,出现的对话框不同),即可打开内存检测工具。如下图(我的Xcode版本:13.0):
检测内存泄露
注:该工具为实时监测,所以需要实时运行App,在觉得有问题的地方多测测,如下图
定位内存泄露
1.出现内存泄露时会出现红叉
2.Leaks–>Call Tree
3.点击页面底部栏的Call Tree(此处指的是Xcode8以上, Xcode7在右下角),选择InvertCallTree和Hide System Libraries
4.此时界面显示是就是内存泄漏的代码部分,最后一步就是定位了,此时双击代码行,或者右键选择reveal in Xcode即可定位到内存泄漏的代码行
至此便找到了内存泄露问题及具体位置。
参考文献链接:https://www.sohu.com/a/278776433_216613
希望能给大家带来帮助!!!