マルチスレッドのトランジション アニメーション システムを作成しようとしていますが、同期に使用している 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
}
私を混乱させているのは-lock
、条件で呼び出している NSThread の名前とアドレスと一致しないため、condvar の説明で指定されたアドレスと名前です。さらに、NSCondition 自体の実際の内容を調べても、_priv
ポインターが nil であるため役に立ちません。誰もこれを経験したことがありますか、それを修正する方法を知っていますか?
PS 同時実行に GCD を使用することを人々が提案する前に: 私はアニメーションに CADisplayLinks を使用しているため、更新をトリガーするには CADisplayLinks が NSRunLoop を必要とするため、NSThreads を使用する必要があります。