個人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是如何實現的?
- 什麼是循環引用?你遇到過哪些循環引用?是如何解決的?