内存泄露指一个对象或变量在使用完成后没有释放掉,这个对下一直占用这部分内存,知道应用停止。
OC中,释放对象的内存时,可以发送release和autorelease消息,release消息马上将引用计数器减1,autorelease消息会把对象放入到内存缓存池中,会延迟到内存释放池周期到后,内存释放池会将池中所有对象的引用计数器减1.当引用计数器为0时,对象所占用的内存才被释放。
一、analyze工具检查内存泄露:analyze是用来来检测MRC代码的内存泄露问题,通过对代码的分析,查找release、retain等消息进行管理的。有氧ARC没有相关的消息,所有无法分析出ARC代码的内存泄露问题。现在不用MRC了,所以不做研究。
二、使用Instruments工具检查内存泄露
Product--->Profile菜单项启动Instruments工具,选择Leaks,点击开始分析,如果右上部分出现红色的菱形图标,说明有内存泄露,右下显示红色柱状图会显示泄露的对象,如果是绿色的菱形出现,说明没有检查出内存泄露,左上选择leak,选择Address列后面的箭头,会进入详细界面,可以看到它们的内存地址、占用字节,所属框架和响应方法。
点击右下的E会出来一列StackTrace,里面有人物头像的条目使我们自己应用的代码,点击即可进入程序代码!ARC中的内存泄露多半由于强引用循环引起的,点击Leak选择Cycles&Roots菜单项,可以查看引用关系。
事实上,内存泄露是极其复杂的问题,工具使用是一方面,经验是另一方面。提高经验,然后借助工具才是解决内存泄露的根本。