我正在尝试创建一个多线程过渡动画系统,但我对用于同步的NSCondition对象中看似已损坏的状态感到困惑。我在下面的调试器中添加了一些行来说明发生了什么:
po [NSThread currentThread]
<NSThread: 0x146f77a0>{name = Transition Animation, num = 4}
po _condition
<NSCondition: 0x1464dff0>{locked = YES, thread = 0xb083b000, name = nil}
p *(NSCondition*)_condition
(NSCondition) $5 = {
NSObject = {
isa = NSCondition
}
_priv = 0x00000000
}
令我困惑的是condvar说明中给出的地址和名称,因为它们与NSThread的姓名和地址不匹配{{1在条件上。此外,检查NSCondition本身的实际内容是没有用的,因为它的-lock
指针是零。有没有人有这方面的经验或知道如何解决它?
P.S。在人们建议我只使用GCD进行并发之前:我使用CADisplayLinks来制作动画,所以我需要使用NSThreads,因为CADisplayLinks需要NSRunLoop才能触发更新。