gpt4 book ai didi

iphone - 什么是 objc_setAssociatedObject() 以及在什么情况下应该使用它?

转载 作者:IT老高 更新时间:2023-10-28 11:26:57 27 4
gpt4 key购买 nike

在我接手的一个项目中,原作者选择使用 objc_setAssociatedObject(),我不是 100% 清楚它的作用或他们决定使用它的原因。

我决定查一下,不幸的是,文档并没有很好地描述它的用途。

objc_setAssociatedObject
使用给定键和关联策略为给定对象设置关联值。
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy 策略)
参数
对象
关联的源对象。

关联的 key 。

与对象的键键关联的值。传递 nil 以清除现有关联。
政策
协会的政策。有关可能的值,请参阅“关联对象行为”。

那么这个函数到底是做什么的,应该在什么情况下使用呢?


阅读答案后编辑

那么下面的代码有什么意义呢?

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);

如果设备已经是实例变量,那么将设​​备与 View Controller 关联起来有什么意义?

最佳答案

objc_setAssociatedObject 为每个 Objective-C 对象添加一个键值存储。它允许您存储对象的其他状态,而不是反射(reflect)在其实例变量中。

当您想在主实现之外存储属于某个对象的东西时,这真的很方便。主要用例之一是您无法添加实例变量的类别。在这里,您使用 objc_setAssociatedObject 将附加变量附加到 self 对象。

如果使用正确的关联策略,您的对象将在主对象被释放时被释放。

关于iphone - 什么是 objc_setAssociatedObject() 以及在什么情况下应该使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5909412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com