cfi*_*her 8 cocoa-touch objective-c avaudioplayer
我有一个AVAudioPlayer实例,可以播放几种声音.有没有办法为AVAudioPlayer实例提供新的声音,或者我是否必须使用initWithData创建一个新实例:?
Chr*_*lay 21
没有API可以将新文件传递给现有的AVAudioPlayer实例.但是,创建AVAudioPlayer并不昂贵,因此只要在完成实例后释放实例,就不应该关注性能.
如果您有一组固定的声音可以互相播放,或者可能重复播放,您可以为每个声音创建一个AVAudioPlayer实例,并通过调用play相应的实例重新使用这些实例.
如果一次只播放一个声音,并且您正在生成新声音(例如基于用户输入的文本到语音),我通常会将一个播放器作为属性.播放新声音时,我会调用[player stop],释放旧播放器,并使用新声音文件实例化新播放器.
重用对象通常是一个坏主意,通常会尝试让对象的寿命尽可能短。这减少了代码可能状态的数量,并使推理变得更容易。(\xe2\x80\x9c 这个值从哪里来?也许它\xe2\x80\x99 是以前实例使用的剩余部分?\xe2\x80\x9d 恶心。)只有在遇到可测量的问题时才打破此规则。
\n\n为了进一步阅读这个思路,您可以浏览标记为 \xe2\x80\x9cimmutable\xe2\x80\x9d 的问题。
\n