2013年
面試官:代理用weak仍是strong?
我 :weak 。
面試官:明天來上班吧面試
2014年
面試官:代理爲何用weak不用strong?
我 : 用strong會形成循環引用。
面試官:明天來上班吧數組
2015年
面試官:weak是怎麼實現的?
我 :weak實際上是 系統經過一個hash表來實現對象的弱引用
面試官:明天來上班吧函數
2016年
面試官:weak是怎麼實現的?
我 :runtime維護了一個weak表,用於存儲指向某個對象的全部weak指針。weak表實際上是一個hash(哈希)表,key是所指對象的地址,Value是weak指針的地址(這個地址的值是所指對象指針的地址)數組。
面試官:明天來上班吧代理
2017年
面試官:weak是怎麼實現的?
我 :
1 初始化時:runtime會調用objc_initWeak函數,初始化一個新的weak指針指向對象的地址。
2 添加引用時:objc_initWeak函數會調用 storeWeak() 函數, storeWeak() 的做用是更新指針指向,建立對應的弱引用表。
3 釋放時,調用clearDeallocating函數。clearDeallocating函數首先根據對象地址獲取全部weak指針地址的數組,而後遍歷這個數組把其中的數據設爲nil,最後把這個entry從weak表中刪除,最後清理對象的記錄。指針
面試官:明天來上班吧對象
2018年
面試官:weak是怎麼實現的?
我 :跟2017年說的同樣,還詳細補充了objc_initWeak, storeWeak, clearDeallocating的實現細節。
面試官:小夥子基礎不錯。13k ,996幹不幹?幹就明天來上班。。 下一個hash
2019年
面試官:weak是怎麼實現的?
我 : 別說了,拿紙來,我動手實現一個。
面試官:等寫完後,面試官慢悠悠的說,小夥子不錯,我考慮考慮,你先回去吧it