iOS 8:之后调用AudioServicesDisposeSystemSoundID时,AudioServicesPl



当调用AudioServicesPlaySystemSound时,它可以很好地播放以前创建的SystemSound。但是,当我之后直接调用AudioServicesDisposeSystemSoundID时,声音不会播放。声音资源似乎在播放之前就被处理掉了。

但在这个堆栈溢出问题上,人们说,有必要处理系统声音以避免内存泄漏。

两种方法的正确方法是什么?几秒钟后,我可以用计时器调用Dispose方法吗?或者创建一个在第一次调用播放方法时创建声音资源一次的singleton,并在singleton的dealloc时处理资源?

- (void) playSound {
NSURL *url   = [[NSBundle mainBundle] URLForResource: @"SentMessage"
withExtension: @"wav"];
SystemSoundID mBeep;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url,  &mBeep );
AudioServicesPlaySystemSound(mBeep);
AudioServicesDisposeSystemSoundID(mBeep);  
}

您可以使用AudioServicesAddSystemSoundCompletion注册一个回调,以便在声音播放结束时调用。你可以在那里处理系统声音。

或者在你班的dealloc中。

最新更新