随着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