最佳答案
在我承担的一个项目中,原作者选择使用 objc_setAssociatedObject()
,我不是100% 清楚它是做什么或为什么他们决定使用它。
我决定查一下,不幸的是,这些文件没有详细描述它的用途。
Objecc _ 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);
如果设备已经是一个实例变量,那么把它和视图控制器联系起来有什么意义呢?