創建一個方法來播放與按鈕處理程序方法分開的聲音。假設你稱之爲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