likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 27

我的Github地址

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

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

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

iOS面试资料汇总

内存布局

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

内存管理方案

1、散列表结构

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

2、SideTable结构

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

3、为什么不是一个SideTable,而是SideTables?

  • 因为修改数据时会加锁,如果所有对象的表放在同一个sideTable,那么加锁会太频繁,效率会受影响。 《新浪微博剖析 iOS 高级面试》笔记(四):内存管理相关面试问题
  • 因为有多个SideTable,所以可以异步操作多张表,彼此之间影响会降低。 《新浪微博剖析 iOS 高级面试》笔记(四):内存管理相关面试问题

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

  • SideTables的本质是一张Hash表
  • Hash表查找的时间复杂度为O(1)
  • 通过对象地址Hash表count,获取目标值下标索引。 《新浪微博剖析 iOS 高级面试》笔记(四):内存管理相关面试问题

数据结构

1、自旋锁 Spinlock_t

2、引用计数表 size_t

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

3、弱引用表 weak_table_t

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

ARC & MRC

1、retain实现

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

2、release实现

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

3、retainCount实现

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

4、dealloc实现

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

4.1、object_disponse()实现

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

4.2、cleanDeallocating()实现

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

弱引用管理

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

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

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

  • 根据对象,查找到弱引用表,提取弱引用数组
  • 遍历其中所有弱引用指针,并置为nil《新浪微博剖析 iOS 高级面试》笔记(四):内存管理相关面试问题

自动释放池

  • autoreleasepool的实现原理是怎样的?
  • autoreleasepool为何可以嵌套使用?

循环引用

内存管理面试总结

  • 什么是ARC?
  • 为什么weak指针指向的对象在废弃之后会被自动置为nil?
  • autoreleasepool是如何实现的?
  • 什么是循环引用?你遇到过哪些循环引用?是如何解决的?
转载自:https://juejin.cn/post/6901202735043969032
评论
请登录