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方法用于释放对象内存,涉及清理弱引用和引用计数。
- 自动释放池用于管理临时对象的内存,嵌套使用时会影响内存释放时机。
➡️