了解 objc_setAssociatedObject 中的 UnsafeRawPointer
Understanding UnsafeRawPointer in objc_setAssociatedObject
我想将 n
个关联对象设置为 Swift
中的一个对象
我的理解是 UnsafeRawPointer
引用的通常模式是这样的...
static var reference = "someRef"
public func add(to myObject: AnyObject) {
let adding = ThingToAdd()
objc_setAssociatedObject(myObject, &reference, adding, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
但这不适用于 n
次调用 add(to:)
类似地,如果我只在每个 myObject
中调用一次,下面的代码就可以正常工作。但是,如果我以相同的方式添加另一个关联对象...它会替换第一个 ThingToAdd
与第二个。构建一个唯一的内联字符串是行不通的。在模拟器上没问题,但在设备上就不行了。
public func add(to myObject: AnyObject) {
let adding = ThingToAdd()
var reference = "objectref\(UUID().uuidString)".replacingOccurrences(of: "-", with: "")
objc_setAssociatedObject(myObject, reference, adding, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
我知道这是不正确的,但是我不知道如何创建 n
数量的 UnsafeRawPointers
以存储具有唯一引用的关联对象。
任何帮助/解释将不胜感激。
将reference
传递给objc_setAssociatedObject
的key: UnsafeRawPointer
参数,将变量存储的地址传递给该函数。
全局变量和静态成员变量(并且只有那些)保证有固定地址。
在您的第一个版本中,使用相同键对 objc_setAssociatedObject
的第二次调用和所有后续调用会替换之前的关联。
在您的第二个版本中,局部变量的地址作为键传递。该地址在后续调用中可能相同也可能不同。请注意,字符串的内容无关紧要,关键只是一个指针,即该变量的地址。
如果您需要将 变量值 与给定对象关联,那么我建议关联单个 NSMutableArray
(或 NSMutableDictionary
)并将值添加到该数组或字典中。
我想将 n
个关联对象设置为 Swift
我的理解是 UnsafeRawPointer
引用的通常模式是这样的...
static var reference = "someRef"
public func add(to myObject: AnyObject) {
let adding = ThingToAdd()
objc_setAssociatedObject(myObject, &reference, adding, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
但这不适用于 n
次调用 add(to:)
类似地,如果我只在每个 myObject
中调用一次,下面的代码就可以正常工作。但是,如果我以相同的方式添加另一个关联对象...它会替换第一个 ThingToAdd
与第二个。构建一个唯一的内联字符串是行不通的。在模拟器上没问题,但在设备上就不行了。
public func add(to myObject: AnyObject) {
let adding = ThingToAdd()
var reference = "objectref\(UUID().uuidString)".replacingOccurrences(of: "-", with: "")
objc_setAssociatedObject(myObject, reference, adding, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
我知道这是不正确的,但是我不知道如何创建 n
数量的 UnsafeRawPointers
以存储具有唯一引用的关联对象。
任何帮助/解释将不胜感激。
将reference
传递给objc_setAssociatedObject
的key: UnsafeRawPointer
参数,将变量存储的地址传递给该函数。
全局变量和静态成员变量(并且只有那些)保证有固定地址。
在您的第一个版本中,使用相同键对 objc_setAssociatedObject
的第二次调用和所有后续调用会替换之前的关联。
在您的第二个版本中,局部变量的地址作为键传递。该地址在后续调用中可能相同也可能不同。请注意,字符串的内容无关紧要,关键只是一个指针,即该变量的地址。
如果您需要将 变量值 与给定对象关联,那么我建议关联单个 NSMutableArray
(或 NSMutableDictionary
)并将值添加到该数组或字典中。