在我进行的一个项目中,原始作者选择使用它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);
如果设备已经是实例变量,将其与视图控制器相关联又有什么意义呢?