个人Github地址git
小码哥《恋上数据结构与算法》笔记github
极客时间《iOS开发高手课》笔记面试
iOS大厂面试高频算法题总结算法
iOS面试资料汇总数组
内存布局
小码哥iOS学习笔记第二十四天: Tagged Pointer 安全
- stack:方法调用。
- heap:经过alloc等分配的对象。
- text:程序代码。
- bss:未初始化的全局变量等。
- data:已初始化的全局变量等。
内存管理方案
- TaggedPointer
- NONPOINTER_ISA
- 散列表
一、散列表结构

二、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是如何实现的?
- 什么是循环引用?你遇到过哪些循环引用?是如何解决的?