在我接受的一个项目中,原作者选择使用objc_setAssociatedObject()
,我并不十分清楚它做了什么或者他们为什么决定使用它。什么是objc_setAssociatedObject()以及在什么情况下应该使用它?
我决定查阅它,不幸的是,这些文档对其目的不是非常具有描述性。
objc_setAssociatedObject
设置使用给定的键和关联政策给定对象关联的值。
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)
参数
object
用于关联的源对象。
key
该协会的关键。
value
与对象的键关联关联的值。通过零来清除现有的关联。
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);
如果设备已经是实例变量,将设备与视图控制器关联的关键点是什么?
嗨的作者,我被审查文档打算发布类似的答案。当你打败我时,我冒昧地在你的回答中建立超文本链接。希望你不介意。 – JeremyP 2011-05-06 09:41:14
@JeremyP:当然。为此非常感谢。错过了添加链接。感谢您的贡献 – visakh7 2011-05-06 09:42:30
如果可以的话,可以分享一些声誉。 :P – visakh7 2011-05-06 09:43:13