我有一个AVAudioPlayer实例,可播放多种声音。有没有办法为AVAudioPlayer实例提供新的声音,或者我是否必须使用initWithData创建一个新实例:?
答案 0 :(得分:21)
没有API将新文件传递给现有的AVAudioPlayer实例。但是,创建AVAudioPlayer并不昂贵,因此只要在完成实例后释放实例,就不应该关注性能。
如果您有一组固定的声音可以互相播放,或者可能重复播放,您可以为每个声音创建一个AVAudioPlayer实例,并通过在相应的实例上调用play
来重用这些实例
如果一次只播放一个声音,并且您正在生成新声音(例如基于用户输入的文本到语音),我通常会将一个播放器作为属性。播放新声音时,我调用[player stop]
,释放旧播放器,并使用新声音文件实例化新播放器。
答案 1 :(得分:0)
重用对象通常是个坏主意,通常会尽量让对象尽可能短暂。这减少了代码可能状态的数量,并使其更容易推理。 (“这个值来自哪里?也许它是以前实例使用的剩余部分?”哎呀。)只有在遇到可测量的问题时才能违反这条规则。
为了进一步阅读这一思路,您可以浏览questions tagged “immutable”。