Ios objc_getAssociatedObject始终返回nil
我试图使用关联对象将属性添加到Ios objc_getAssociatedObject始终返回nil,ios,swift,Ios,Swift,我试图使用关联对象将属性添加到Timer的扩展中,但函数objc\u setAssociatedObject始终返回nil 所以这应该行得通 代码: 你知道为什么这不起作用吗 更多代码: @nonobjc public class func new(every interval: TimeInterval, _ block: @escaping (Timer) -> Void) -> Timer { var timer: Timer! timer = CFRunLo
Timer
的扩展中,但函数objc\u setAssociatedObject
始终返回nil
所以这应该行得通
代码:
你知道为什么这不起作用吗
更多代码:
@nonobjc public class func new(every interval: TimeInterval, _ block: @escaping (Timer) -> Void) -> Timer {
var timer: Timer!
timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, interval, 0, 0) { _ in
print("timer: \(timer.numberOfRepeats), : \(timer.repeatCounter), : \(timer)")
if timer.numberOfRepeats > 0 {
if timer.repeatCounter > timer.numberOfRepeats {
timer.invalidate()
return
} else {
timer.repeatCounter += 1
}
}
block(timer)
}
return timer
}
所以有些问题是我没有使用相同的计时器对象。 还有一些问题:
static let repeatCounterAddress=“repeat\u counter\u address”
有时未初始化,并且具有空字符串值键的值相同。如果只使用字符串值,则每次调用objc\u getAssociatedObject
或objc\u setAssociatedObject
时,其原始值可能不同
您可以使用以下代码对此进行检查:
func test(_ a: UnsafeRawPointer) {
print("\(a)")
}
let a = "abc"
test(a)
test(a)
test(a)
test(a)
这张照片
0x00006040004427e0
0x00006040004427e0
0x0000608000052980
0x0000600000055c50
例如,不同的原始指针被解释为不同的关联对象。请尝试以下操作(注意符号):
它始终确保给定的地址与键的值相同。如果只使用字符串值,则每次调用objc\u getAssociatedObject
或objc\u setAssociatedObject
时,其原始值可能不同
您可以使用以下代码对此进行检查:
func test(_ a: UnsafeRawPointer) {
print("\(a)")
}
let a = "abc"
test(a)
test(a)
test(a)
test(a)
这张照片
0x00006040004427e0
0x00006040004427e0
0x0000608000052980
0x0000600000055c50
例如,不同的原始指针被解释为不同的关联对象。我想我是,我在CFRunLoopTimerCreateWithHandler闭包中使用计时器,用更多代码更新问题这是我想我是的一个分支,我在CFRunLoopTimerCreateWithHandler闭包中使用计时器,用更多代码更新问题这是一个分叉