《新浪微博剖析 iOS 高级面试》笔记(四):内存管理相关面试问题

个人Github地址git

小码哥《恋上数据结构与算法》笔记github

极客时间《iOS开发高手课》笔记面试

iOS大厂面试高频算法题总结算法

iOS面试资料汇总数组

内存布局

小码哥iOS学习笔记第二十四天: Tagged Pointer 安全

  • stack:方法调用。
  • heap:经过alloc等分配的对象。
  • text:程序代码。
  • bss:未初始化的全局变量等。
  • data:已初始化的全局变量等。

内存管理方案

一、散列表结构

二、SideTable结构

三、为何不是一个SideTable,而是SideTables?

  • 由于修改数据时会加锁,若是全部对象的表放在同一个sideTable,那么加锁会太频繁,效率会受影响。

  • 由于有多个SideTable,因此能够异步操做多张表,彼此之间影响会下降。

四、怎样实现快速分流(怎样经过一个对象快速定位它所在的表)?

  • SideTables的本质是一张Hash表
  • Hash表查找的时间复杂度为O(1)
  • 经过对象地址Hash表count,获取目标值下标索引。

数据结构

一、自旋锁 Spinlock_t

小码哥iOS学习笔记第二十天: 多线程的安全隐患 markdown

二、引用计数表 size_t

  • 引用计数表是经过Hash表来实现的。
  • Hash表查找的时间复杂度为O(1)

三、弱引用表 weak_table_t

ARC & MRC

一、retain实现

二、release实现

三、retainCount实现

四、dealloc实现

4.一、object_disponse()实现

4.二、cleanDeallocating()实现

弱引用管理

一、弱引用变量如何被添加到弱引用表中?

二、当一个对象被释放,weak变量是如何处理的?

  • 根据对象,查找到弱引用表,提取弱引用数组
  • 遍历其中全部弱引用指针,并置为nil

自动释放池

小码哥iOS学习笔记第二十六天: @autoreleasepool 数据结构

  • autoreleasepool的实现原理是怎样的?
  • autoreleasepool为什么能够嵌套使用?

循环引用

  • 自循环引用

  • 相互循环引用

  • 多循环引用

内存管理面试总结

  • 什么是ARC?
  • 为何weak指针指向的对象在废弃以后会被自动置为nil?
  • autoreleasepool是如何实现的?
  • 什么是循环引用?你遇到过哪些循环引用?是如何解决的?
相关文章
相关标签/搜索