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 的实例从一个变量移动到另一个变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ios5 中播放本地方法的 AVAudioPlayer?