iOS内存管理(内存布局/nonpointer/sidetable/alloc/init/retain/release/weak/dealloc/自动释放池)

💡 原文中文,约26800字,阅读约需64分钟。
📝

内容提要

本文总结了iOS内存管理的相关知识,包括内存布局、栈区、堆区、大局区、常量区、代码段等。还介绍了引用计数、自动释放池、弱引用等概念和相关操作。文章提到了在使用autorelease时需要注意的情况。

🎯

关键要点

  • iOS内存管理涉及内存布局、栈区、堆区、大局区、常量区和代码段等。
  • 内存分为五大区,内核区和保存区不属于这五大区。
  • 栈区存储函数参数和局部变量,内存地址从高到低延伸,栈溢出会导致内存泄漏。
  • 堆区内存大小动态变化,存储通过alloc或new创建的对象,地址从低到高扩展。
  • 大局区和静态区存储未初始化和已初始化的全局变量和静态变量。
  • 常量区存储常量字符串,程序结束后由系统释放。
  • 代码段存储程序代码,编译时加载到内存中。
  • 引用计数是管理对象生命周期的方式,当引用计数为0时,系统会释放对象。
  • SideTables用于存储引用计数,确保线程安全。
  • alloc方法分配内存但不设置引用计数,init方法会将引用计数设置为1。
  • retain和release方法用于增加和减少引用计数,确保内存管理的有效性。
  • weak引用用于避免循环引用,底层实现涉及弱引用表的管理。
  • dealloc方法用于释放对象内存,涉及清理弱引用和引用计数。
  • 自动释放池用于管理临时对象的内存,嵌套使用时会影响内存释放时机。
➡️

继续阅读