《新浪微博剖析 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是如何實現的?
  • 什麼是循環引用?你遇到過哪些循環引用?是如何解決的?
相關文章
相關標籤/搜索