iOS:将 AVAudioPlayer 的实例从一个变量移动到另一个变量

Posted

技术标签:

【中文标题】iOS:将 AVAudioPlayer 的实例从一个变量移动到另一个变量【英文标题】:iOS: Moving instance of AVAudioPlayer from one variable to another 【发布时间】:2013-09-03 00:33:51 【问题描述】:

这是我想做的事情:我有一个名为 primaryPlayer 的 AVAudioPlayer 正在播放曲目,我希望它在我将播放器转移到 secondaryPlayer 时继续不间断。然后,我将使用primaryPlayer 来创建一个新的 AVAudioPlayer 实例,以便与原始曲目一起播放。

也许就这么简单:

secondaryPlayer=primaryPlayer;
primaryPlayer=[[AVAudioPlayer alloc] initWithContentsOfURL:songURL error:nil];

*这两个变量是类的属性,因此没有定义。

我担心我可能会遗漏一些东西。例如,这段代码是否只是将两个变量设置为指向同一个内存地址?这样在第二行代码之后,两个变量都对应同一个玩家?

我认为这可能更像是一个 Objective C(或者可能只是 C)问题,但感谢您的阅读以及任何关于此的“指针”都会很棒! :)

【问题讨论】:

【参考方案1】:

假设primaryPlayer player 指向地址0x1234 的有效AVAudioPlayer 实例,而secondaryPlayer 具有任意值,并且两者都被声明为strong 属性。

secondaryPlayer=primaryPlayer;

现在两个变量都指向同一个对象(地址为0x1234)。

primaryPlayer=[[AVAudioPlayer alloc] initWithContentsOfURL:songURL error:nil];

secondary player 仍然指向同一个对象,并且作为强引用,该对象仍然存在。 primaryPlayer 现在指向新创建的对象,所以现在你有两个不同的玩家对象。

【讨论】:

太好了,感谢您的解释。如果使用了命令 &secondaryPlayer=&primaryPlayer,我担心的行为(基本上,这两个变量最终会是同一件事)会发生吗?只是想更好地理解这些指针! 不,这不会编译,因为&secondaryPlayer 是不可分配的。

以上是关于iOS:将 AVAudioPlayer 的实例从一个变量移动到另一个变量的主要内容,如果未能解决你的问题,请参考以下文章

iOS:AVAudioPlayer 只能播放一个文件吗?

设置 AVAudioPlayer 实例的委托

如何在 ios5 中播放本地方法的 AVAudioPlayer?

重用 AVAudioPlayer 以获得不同的声音

声音播放完毕后 AVAudioPlayer 实例会发生啥? [关闭]

ios开发之--AVAudioPlayer制作了一款播放器,耳机有声音,扬声器没声音