美文网首页
内存泄漏检测

内存泄漏检测

作者: 万万万万万万一 | 来源:发表于2023-07-11 16:06 被阅读0次

    检测方案

    手动检测

    手动检测,实现 dealloc 方法,离开当前类是否会调用;

    可以实现 ViewController 的分类,在分类里面实现 -(void)dealloc , 在离开页面是看是否有信息打印,如果打印则证明当前类没有内存泄漏问题

    ```

    - (void)dealloc {    

        NSLog(@"%s", __func__);

    }

    ```


    工具检测,使用 Xcode 自带的工具进行检测;

    静态内存泄漏分析方法

    1、逻辑错误:访问空指针或未初始化的变量等;

    2、内存管理错误:如内存泄漏等;

    3、声明错误:从未使用过的变量;

    4、Api调用错误:未包含使用的库和框架

    静态分析(Analyze):不运行程序,直接检测代码中是否有内存问题 (不一定百分百准确 结合实际问题 ,仅仅提供建议)

    如果MRC下编译检测出很多问题 证明此公司的这个项目基础很差


    动态内存泄漏分析方法

    1.Time Profiler:CPU 分析工具分析代码的执行时间。

    2.Core Animation:离屏渲染,图层混合等GPU耗时。

    3.Leaks:内存检测,内存泄漏检测工具。

    4.Energy Log:耗电检测工具。

    5.Network:流量检测工具

    1.运行程序,查看内存分配情况(Allocations)

    2.动态分析(Profile == Instruments)

    查看内存的分配情況 (Allocat ions )

    * 可以查看做出了某个操作后(比如点击了某个按钮\显示了某个控制器),内存是否有暴增的情况(突然变化)



    2.运行程序通过使用app来查看是否有内存泄露(Leaks)



    自动化检测,自动检测出发生内存泄漏的地方,并打印出对应的信息;

    1.主要用于检测循环引用 - FBRetainCycleDetector

    2.主要用于快速检测潜在的内存泄漏对象,并提供给 FBRetainCycleDetector 进行检测 -FBAllocationTracker

    常见的内存泄露场景:

    目前,在 ARC 环境下,导致内存泄漏的根本原因是代码中存在循环引用,从而导致一些内存无法释放,最终导致 dealloc() 方法无法被调用。主要原因大概有一下几种类型:

    1.Retain Cycle,Block 强引用

    2.NSTimer使用不当

    3.第三方提供方法造成的内存泄漏

    4.CoreFoundation 方式申请的内存,忘记释放

    如何让程序尽量减少内存泄漏

    31 ARC

    * Foundat ion对象(OC对象):只要方法中包含了alloclnewlcopy\mutableCopyl retain等关键字,那么这些方法产

    生的对象,就必须在不再使用的时候调用1次release或者1次auto release

    * * CoreFoundat ion对象(C对象)”:只要西数中包含了createlnewlcopy\retain等关键宇,那么这些方法产生的对象,

    就必须在不再使用的时候调用1次CFRe lease或者其他release函数

    , 2.ARC(只自动管理OC对象,不会自动管理C语言对象)

    * CoreFoundat ion对象(C对象):只要函数中包含了createinewlcopyretain等关键宇,那么这些方法产生的对象,

    就必须在不再使用的时候调用1次CFRelease或者其他release函数

    *3.block的注意

    * 11 block的内存默认在栈里面(系统自动管理)

    » void (^test) () =

    1:

    11如果对block进行了Copy操作,block的内存会迁移到堆里面(需要通过代码管理内存)

    "Block copy(test):

    。 11在不需要使用block的时候,应该做1次release操作

    A Block release(test):

    [test releasel:

    相关文章

      网友评论

          本文标题:内存泄漏检测

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