iOS 8:当事后调用AudioServicesDisposeSystemSoundID时,AudioServicesPlaySystemSound不播放声音

时间:2015-04-13 20:10:46

标签: ios audio

调用 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);  
}

1 个答案:

答案 0 :(得分:3)

您可以使用AudioServicesAddSystemSoundCompletion注册要在声音播放完毕时调用的回调。你可以在那里处理系统声音。

或者在班级的dealloc