iOS内存管理

作者: 三月木头 | 来源:发表于2019-12-15 02:20 被阅读0次
    内存分为几个区?
    • 代码区
    • 全局静态区(global)
    • 堆区(heap)
    • 栈区(stack)
    内存中,不同区分别存放什么?
    • 代码区:存放类,分类编译后的数据。(编译即存在)
    • 全局静态区: 主要存放静态数据,全局数据和常量,程序运行之后一直存在。(编译即存在)
    • 堆区:存放alloc,new等关键字生成的对象。
    • 栈区: 主要存放局部变量和函数参数等相关变量,超出作用域之后自动释放。
    iOS常说的内存管理,到底管理的什么呢?

    说到iOS的内存管理,大家首先想到的可能是引用计数相关的东西,而跟引用计数相关的内存都是分布在堆区(heap),也就是说我们平时关注最多的部分都是堆区的内存。

    经验之谈 根据指针看内存位置

    OC中打印对象地址,然后根据6堆7栈1静态原则,区分出对象在内存什么位置。 举例:

    BlockTest[9499:776114] a: 0x7ffee83f7fac    其中 0x7 说明开辟内存在栈区
    BlockTest[9499:776114] b: 0x107808828        其中 0x1 说明开辟内存在静态区
    BlockTest[9499:776114] array1: 0x600003598720 其中 0x6 说明开辟内存在堆区
    

    相关文章

      网友评论

        本文标题:iOS内存管理

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