gpt4 book ai didi

objective-c - 了解 objc_setAssociatedObject 中的 UnsafeRawPointer

转载 作者:行者123 更新时间:2023-11-30 10:28:11 24 4
gpt4 key购买 nike

我想设置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为了存储具有唯一引用的关联对象。

任何帮助/解释将不胜感激。

最佳答案

引用传递给objc_setAssociatedObjectkey: UnsafeRawPointer参数将变量存储的地址传递给该参数功能。

保证全局变量和静态成员变量(并且只有这些变量)具有固定地址。

在您的第一个版本中,使用相同键对 objc_setAssociatedObject 的第二次调用和所有后续调用都会替换以前的关联。

在您的第二个版本中,局部变量的地址作为键传递。该地址在后续调用中可能相同,也可能不同。请注意,字符串的内容无关紧要,键只是一个指针,即该变量的地址。

如果您需要将可变数量的值与给定对象关联,那么我建议关联单个NSMutableArray(或NSMutableDictionary )并将值添加到该数组或字典中。

关于objective-c - 了解 objc_setAssociatedObject 中的 UnsafeRawPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59694324/

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