在我接手的一个项目中,原作者选择使用它objc_setAssociatedObject()
,我不是 100% 清楚它的作用或他们决定使用它的原因。
我决定查一下,不幸的是,文档对它的用途没有很好的描述。
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);
如果设备已经是实例变量,那么将设备与视图控制器关联起来有什么意义?