objc_setAssociatedObject()
,但我不完全清楚它是做什么,以及他们为什么决定使用它。我决定查找一下,不幸的是,文档对它的目的描述得不够清楚。
objc_setAssociatedObject使用给定的键和关联策略为给定对象设置关联值。
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)
参数
object
关联值源对象。
key
关联的键。
value
与对象的键关联的值。传递nil以清除现有关联。
policy
关联策略。可能的值,请参见“关联对象行为”。
那么这个函数到底是做什么的?在什么情况下应该使用它呢?
阅读答案后编辑
所以下面这段代码的意义是什么?Device *device = [self.list objectAtIndex:[indexPath row]];
DeviceViewController *next = [[DeviceViewController alloc] initWithController:self.controller
device:device
item:self.rootVC.selectedItem];
objc_setAssociatedObject(device, &kDeviceControllerKey, next, OBJC_ASSOCIATION_RETAIN);
如果设备已经是实例变量,那么将其与视图控制器关联的意义是什么?
objc_setAssociatedObject
的语义含义。这种机制的优点在于它可以在不更改类(即不添加实例变量)的情况下执行。因此,您可以在框架类或其他您不拥有源代码的情况下使用它。 - Nikolai Ruhe