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