0

我想将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)

}

我知道这是不正确的,但是我不知道如何创建nnumber ofUnsafeRawPointers以存储具有唯一引用的关联对象。

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

4

1 回答 1

0

传递referencekey: UnsafeRawPointer参数将变量存储objc_setAssociatedObject地址传递给该函数。

全局变量和静态成员变量(并且只有那些)保证有一个固定的地址。

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

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

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

于 2020-01-11T12:54:18.937 回答