美文网首页
Instrument之Leaks

Instrument之Leaks

作者: 董二千 | 来源:发表于2016-01-21 17:01 被阅读633次

    这篇介绍Xcode的Instrument之Leaks
    我们经常遇到的内存泄露有

    • 对象初始化之后没有release,这在MRC的环境下比较明显。在ARC环境下,主要是C的内存释放需要手动。
    • 循环引用,导致对象一直得不到释放

    我们的检查分为两步

    1.第一步是静态分析

    用Xcode,Product里面的Analyze,他可以指出你code里面可能出现内存泄露的地方,和一些简单的性能分析
    1.未继承父类方法

    未调用[super viewWillAppear].png

    2.有变量未使用

    未读的值.png

    3.可能导致内存泄露

    可能导致内存泄露.png

    Tip:当你试图访问一个内存已经被释放的对象时,也就是野指针问题,会出现这样的crash信息

    指针找不到内存空间.png

    2.Leaks

    我们不能靠analyze找出所有的内存泄露,这时候需要更加强大的工具 Leaks
    选择,Open Developer Tool -> instruments,出现如下模块

    51AD9544-8471-4846-B9EF-95D2B2FAC156.png

    选择Leaks,选择设备和要运行的Project

    7330681D-C8A0-4899-8B01-3EC1AA009057.png

    选择红色按钮,开始检测,当出现红色叉叉的符号时,说明这个地方有内存泄露

    出现内存泄露的地方.png

    详细数据请看Detail pan

    9E09E78C-4A3A-47C4-824D-7205D76FBC2B.png
    Leaked Object :泄露的对象
    Address: 内存中的地址,<multiple>说明有多个,可以下拉展开
    Size: 一共泄露内存的大小
    Responsible Library: 相关的库
    Responsible Frame:所在的方法,双击这里可以调到Xcode里对应方法里面

    上面看的是Detail pan 上面的Leaks,下面看Call Tree

    Call Tree.png

    右侧的Display Setting 的Call Tree 选择隐藏系统库(Hide system Libraries),颠倒Call Tree(Invert Call Tree)
    这样可以很方便的看到你在你代码里出现的内存问题

    再看我代码里的问题,

    24C81D0A-74F7-4719-B462-5C971F71DEFE.png

    因为是在MRC环境下,这下People的对象都没有Release。

    生命不息,coding不止。
    谢谢阅读。

    相关文章

      网友评论

          本文标题:Instrument之Leaks

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