在Objective-C中,关联对象(Associated Object)是通过runtime函数实现的动态对象关联技术,允许开发者在运行时将任意对象关联到其他对象上。关联对象并不是直接存储在对象本身中,而是通过一个全局的关联对象哈希表来存储的。
具体来说,Objective-C的runtime库提供了以下三个函数来管理关联对象:
objc_setAssociatedObject
:将一个对象关联到另一个对象上;objc_getAssociatedObject
:获取一个对象所关联的对象;objc_removeAssociatedObjects
:移除一个对象所关联的所有对象。
这些函数使用一个唯一的关键字(key)来标识关联对象,并且关键字必须是一个静态变量地址,以便在多个方法之间共享。
当调用objc_setAssociatedObject
函数时,Runtime会将关键字和关联对象的指针保存到全局的关联对象哈希表中。当调用objc_getAssociatedObject
函数时,Runtime会根据对象和关键字从哈希表中查找关联对象的指针并返回它。当调用objc_removeAssociatedObjects
函数时,Runtime会从哈希表中删除与对象相关联的所有关联对象。因此,关联对象的实际存储位置是由Objective-C的runtime库来管理的,而不是存储在对象本身中。