IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS 内存管理:内存分区-ARC-MRC-引用计数-弱引用-自动释放池-循环引用 -> 正文阅读

[移动开发]iOS 内存管理:内存分区-ARC-MRC-引用计数-弱引用-自动释放池-循环引用

几乎是默写出来,加上自己理解的博客(iOS面试)

  • 内存布局: .text(代码段) .data(常量区:已初始化) .bss(全局静态区:未初始化) heap(堆:alloc对象) stack(栈:方法调用)

内存管理方案:

  • TaggedPointer: Tagged Pointer指针本身就可以表示NSNumber了,不需要去堆区再开辟内存
  • NONPOINTER_ISA(非指针型isa):isa指针64位,时间记录类地址32或40位就够用了,剩余的这些位中存了一些内存管理相关的数据内容
  • 散列表(hash):SideTables(), SideTable(spinlock_t自旋锁 RefcountMap引用计数表 weak_table_t弱引用表)
  • 通过一个对象的指针,通过hash算法快速的定位到他属于哪个SideTable表
  • 自旋锁(Spinlock_t): 忙等,如引用计数加1
  • 引用计数表(RefcountMap):hash表,通过指针可以找到(两次hash查找)对应对象的引用计数
  • 弱引用表(weak_table_t): hash表,通过对象指针找到(两次hash查找)对应的弱引用数组(weak_entry_t),数组中的每个元素(weakPtr(N))就是一个弱引用指针

ARC:编译器(LLVM)为我们在相应的地方插入retain,release操作。还需要runtime的协作

  • 引用计数管理:相关方法的底层实现
  • 弱引用管理:底层实现
  • weak自动置为nil:当一个对象被dealloc后,在dealloc的内部实现中,会去调用弱引用清除的相关函数,这个函数的内部实现中,会根据当前对象指针,通过两次hash查找,第一次找到对应的SideTable, 第二次找到对应的弱引用数组。然后遍历这个数组中的所有弱引用指针,分别置为nil

自动释放池

  • 是以栈为结点通过双向链表的形式组合而成。是和线程一一对应的(AutoreleasePoolPage)
  • 两个哨兵对象之间是一个自动释放池,多层嵌套就是多次插入哨兵对象
  • AutoreleasePoolPage::pop 根据传入的哨兵对象找到对应位置,给上传push操作之后添加的对象依次发送release消息,回退next指针到正确位置
  • 局部变量array什么时候被释放:在每一次runloop循环中,当他将要结束的时候,会对前一次创建的autoreleasepool进行pop操作,同时会push进来一个新的autoreleasepool。array是在runloop结束autoreleasepool pop的时候释放的
  • 使用场景:在for循环中alloc图片数据等内存消耗较大的场景手动插入autoreleasePool,来降低内存的峰值,防止一些内存消耗过大导致的问题

循环引用

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:41:16  更:2022-03-10 22:41:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 16:21:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码