美文网首页常看IosiOS提升开发效率
iOS检测内存泄露Allocations简单用法

iOS检测内存泄露Allocations简单用法

作者: 船长_ | 来源:发表于2016-07-17 15:34 被阅读2222次

    从苹果的开发者文档里可以看到,内存分类

    1.Leaked memory: Memory unreferenced by your application that cannot be used again or freed (also detectable by using the Leaks instrument).

    2.Abandoned memory: Memory still referenced by your application that has no useful purpose.

    3.Cached memory: Memory still referenced by your application that might be used again for better performance.

    其中 Leaked memoryAbandoned memory 都属于应该释放而没释放的内存,都是内存泄露
    在 ARC 时代更常见的内存泄露是循环引用导致的Abandoned memory,Leaks 工具查不出这类内存泄露

    现在利用Instrument的Allocations进行简单的方法检测内存泄露

    1.打开Instrument的Allocations,选择对应的模拟器(比如6s),对应的项目.
    2.录制前基本配置,如图

    Snip20160717_1.png

    3.对相应的项目,找到对应控制器,push->pop,连续四五次(需同时配合4步骤一起做),如下图

    demo3.gif

    4.每次push控制器后,点击generations,生成快照,如第一个图
    5.查看每次生成的快照对应的内存,如下图,发现四个红旗flag,第一个为3.19MB,第二个为6.10MB,第三个为8.2MB,第四个为10.6MB,也就是说每次push后,内存都会增加了2~3MB,(也可以看输出台的Growth列表信息得知)由此可以判断出这个控制器发生了内存泄露.

    demo2.gif

    6.检查这个控制器的代码,看是否有循环引用.示例程序文件里是block里直接用了self,如下

    tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
            [self loadNewPositions];
        }];
    

    修改代码为如下

    @weakify(self);
    tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
            @strongify(self);
            [self loadNewPositions];
        }];
    

    此方法有些繁琐,也有MLeaksFinder第三方库进行内存检测,有兴趣的可以看原文进行测试.
    原文链接

    相关文章

      网友评论

      • XIAODAO:“在 ARC 时代更常见的内存泄露是循环引用导致的Abandoned memory,Leaks 工具查不出这类内存泄露” ----- Leaks可以查出循环引用引起的内存泄露,Xcode 7.3 版本已验证
      • 镜中之宇:这个block没有循环引用,self根本没持有这个block
        船长_:@镜中之宇 分情况吧,我这里有验证
      • AT19:怎么通过红旗flag找到相应的代码??
        Piccc:@山治ping 哈哈哈不是延迟高,我是路人回复你的
        AT19:@Piccc 延迟有点高啊,不过还是谢谢
        Piccc:mark generation啊
      • 奔跑的鸿:请问最后那个@strongify(self)有什么用,这种情况不写它是不是也没关系,写了它能确保什么呢?
        船长_:@奔跑的鸿 保证代码执行到block 中,self 不被释放,当block执行完后,会自动释放strongself
        奔跑的鸿:@船长_ 可否问少部分情况呢!
        船长_:@奔跑的鸿 大部分情况不写也没关系

      本文标题:iOS检测内存泄露Allocations简单用法

      本文链接:https://www.haomeiwen.com/subject/njbujttx.html