创建一个方法来播放与按钮处理程序方法分开的声音。假设你称之为playSound
。在你的按钮处理程序,在后台执行该方法:
[self performSelectorInBackground:@selector(playSound) withObject:nil];
这并不需要支付额外的开销产卵关闭一个线程,才可以播放声音。如果你想加快它多一点,创建工作线程和使用的池:
[self performSelector:@selector(playSound)
onThread:nextThread
withObject:nil
waitUntilDone:NO];
要创建工作线程池:
-(void)stillWorking {
NSLog(@"Still working!");
}
-(void)workerThreadMain {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSTimer *threadTimer = [NSTimer scheduledTimerWithTimeInterval:10
target:self
selector:@selector(stillWorking)
userInfo:nil
repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:threadTimer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
-(NSArray*)createWorkerThreads {
NSMutableArray *threadArray = [[[NSMutableArray alloc] initWithCapacity:10]autorelease];
NSThread *workerThread;
for (i=0;i<10;i++) {
workerThread = [[NSThread alloc]initWithTarget:self
selector:@selector(workerThreadMain)
object:nil];
[workerThread start];
[threadArray addObject:workerThread];
}
return [NSArray arrayWithArray:threadArray];
}
(此代码是未经测试,可能需要一些调试,但它应该让你去正确的方向。)
thanx约翰。 我试过你提供的第一个解决方案,声音之间的间隔实际上比以前更慢。为了测试事情,我给按钮附加了5秒钟的声音,并尝试在2-3秒内间隔点击它,期望声音重叠 - 好 - 它们不会。该按钮仍在等待第一个声音完成,即使我已将播放方法调用与控制分离。 在我开始探索工作线程阵列之前,您对这个结果有什么想法?为什么按钮不允许多个线程分叉? 再次感谢! – 2010-06-21 21:39:14
如果它没有播放重叠的声音,我会怀疑发出声音的呼叫正在等待先前的呼叫完成。 – 2010-07-16 05:48:07