调用 AudioServicesPlaySystemSound 时,它可以很好地播放以前创建的SystemSound。但是当我之后直接调用 AudioServicesDisposeSystemSoundID 时,声音不会播放。似乎声音资源在它播放之前被处理掉了。
但在this Stackoverflow-Question人们说,有必要处理System-Sound以避免内存泄漏。
这两种方法的正确方法如何?我会在几秒钟后用计时器调用Dispose-Method吗?或者创建一个单例,在Play-Method的第一次调用时创建一次Sound-Resource并将资源放置在单例的dealloc中?
- (void) playSound {
NSURL *url = [[NSBundle mainBundle] URLForResource: @"SentMessage"
withExtension: @"wav"];
SystemSoundID mBeep;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &mBeep );
AudioServicesPlaySystemSound(mBeep);
AudioServicesDisposeSystemSoundID(mBeep);
}
答案 0 :(得分:3)
您可以使用AudioServicesAddSystemSoundCompletion
注册要在声音播放完毕时调用的回调。你可以在那里处理系统声音。
或者在班级的dealloc
。