我有一个多线程问题。在我正在排序和修改 NSOrderedSet 的代码位周围放置一个很好的 @synchronized{} 似乎可以解决我正在读回它的部分的问题。我现在的问题是试图弄清楚我的另一个线程来自哪里,以便我可以更好地理解我的代码。这些片段中的任何一个都会导致新线程吗?
CADisplayLink* gameTimer;
gameTimer = [CADisplayLink
displayLinkWithTarget:self
selector:@selector(updateDisplay:)];
[gameTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
和/或这会启动一个线程吗?
AURenderCallbackStruct callbackStruct;
callbackStruct.inputProc = PerformThru;
callbackStruct.inputProcRefCon = &_effectState;
AudioUnitSetProperty( _effectState.rioUnit,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Global,
bus0,
&callbackStruct,
sizeof(callbackStruct);
AudioOutputUnitStart(_effectState.rioUnit);
我猜是后者,因为在 PerformThru 函数中,我开始看到调试消息,例如
Object 0x682ec20 of class __NSOrderedSetM autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
但是,主要我有@autoreleasepool ..所以我猜有什么导致另一个线程。