隨着ARC的出現,一些新的功能可供開發人員使用弱引用的對象。 id objc_loadWeak(id *location)
就是其中之一。這個函數接收一個參數,對應於存儲弱對象的內存中的一個位置,如果它仍然存在則返回該對象,或者如果它被釋放,則返回nil
。Objective-C運行時如何知道弱引用的對象是否還活着?
看來,當一個對象obj
與id objc_storeWeak(id *location, id obj)
存儲爲weak
在一個位置location
,obj
被放在一個「弱圖」,以location
作爲重點。但是,爲了檢索obj
,objc_loadWeak
不僅可以使用location
作爲關鍵字並返回對應於obj
的值。它還必須檢查obj
是否還活着,如果它不在,則返回nil
。
但是,objc_loadWeak
無法嘗試讀取該對象的保留計數,因爲該對象可能已被釋放。此外,儘管在相同的文件(NSObject.mm)中執行弱映射objc_storeWeak
,objc_loadWeak
和NSObject
類,但是NSObject
的dealloc
方法不向弱映射發信號通知正被釋放的對象正在消失。
那麼,Objective-C運行庫如何確定一個weak
對象是否仍然存在?
哦,是的。直到最後,我沒有遵循鏈條。當我到達'object_dispose()'時停止。由於這個函數被放置在另一個文件中,我認爲它與弱引用處理無關。非常感謝你! – LuisABOL 2013-02-13 13:53:19
@ LuisAntonioBotelhoO.Leite不客氣。 – 2013-02-13 13:54:01