内存管理

作者: 二斤寂寞 | 来源:发表于2019-05-29 20:19 被阅读11次

    目录:
    1内存布局
    2内存管理方案
    2.1Tagged Pointer
    2.2NONPOINTER_ISA
    2.3散列表(side table )
    3数据结构
    3.1自旋锁
    3.2引用计数表
    3.3弱引用表
    4引用计数
    5ARC & MRC
    5.1MRC手动
    5.2ARC自动
    5.3iOS内存的代码实现
    5.31alloc
    5.32retain
    5.33release
    5.34retainCount
    5.35autorelease
    5.36dealloc
    6弱引用
    7自动释放池
    8常见的容易造成泄漏的点
    8.1循环引用
    8.2使用单例的的一些情况
    8.3NSTimer
    8.4NSURLSession
    8.5非OC对象的内存问题
    8.6其他泄漏情况
    8.7ARC内存泄露的检测
    8.71使用Xcode自带工具Instrument
    8.72在对象dealloc中进行打印


    01.png

    01内存布局

    02.png
    03.png

    堆栈空间分配

    栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

    堆栈缓存方式

    栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。 堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

    内存中的栈区处于相对较高的地址以地址的增长方向为上的话,栈地址是向下增长的
    栈中分配局部变量空间,堆区是向上增长的用于分配程序员申请的内存空间。另外还有静态区是分配静态变量,全局变量空间的;只读区是分配常量和程序代码空间的;以及其他一些分区。


    2内存管理方案

    03.png
    2.1Tagged Pointer
    Tagged Pointer01.png
    Tagged Pointer02.png
    Tagged Pointer03.png
    2.2NONPOINTER_ISA(非指针型isa)
    NONPOINTER_ISA01.png
    NONPOINTER_ISA02.png
    2.3散列表(side table )
    散列表01.png
    散列表02.png 散列表03.png 散列表04.png 散列表05.png 散列表06.png

    3数据结构

    3.1自旋锁
    自旋锁.png
    3.2引用计数表
    引用计数表.png
    3.3弱引用表
    弱引用表.png

    4 引用计数


    5ARC & MRC

    5.1 MRC(MannulReference Counting)

    需要程序员自己管理一个对象的引用计数。


    MRC.png
    5.2 ARC(Automatic Reference Counting)

    ARC 是苹果引入的一种自动内存管理机制,会根据引用计数自动监视对象的生存周期,实现方式是在编译时期自动在已有代码中插入合适的内存管理代码以及在 Runtime 做一些优化。

    ARC.png
    5.3 iOS内存的代码实现

    5.31alloc
    5.32retain
    5.33release
    5.34retainCount
    5.35autorelease
    5.36dealloc


    6 弱引用

    7 autoreleasepool 自动释放池


    8常见的容易造成泄漏的点

    8.1循环引用
    8.2使用单例的的一些情况
    8.3NSTimer
    8.4NSURLSession
    8.5非OC对象的内存问题
    8.6其他泄漏情况
    8.7ARC内存泄露的检测
    8.71使用Xcode自带工具Instrument
    8.72在对象dealloc中进行打印

    参考文章:
    http://blog.devtang.com/2016/07/30/ios-memory-management/
    https://juejin.im/post/5abe543bf265da23784064dd
    https://www.jianshu.com/p/5d2163640e26
    https://juejin.im/post/5c4821fdf265da613b70159d
    https://juejin.im/post/5c0744f6e51d45598b76f481
    https://juejin.im/post/58c9fff8128fe1006c7be387
    https://juejin.im/post/5ce36300f265da1b8b2b32b6?utm_source=gold_browser_extension#heading-14

    相关文章

      网友评论

        本文标题:内存管理

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