Ios AVAudioPlayer问题
使用AVAudio播放器播放1首以上歌曲 当第一首歌曲完成时-voidAudioPlayerDifinishPlaying:成功:调用 如果我用那个代码,它就行了Ios AVAudioPlayer问题,ios,iphone,avaudioplayer,Ios,Iphone,Avaudioplayer,使用AVAudio播放器播放1首以上歌曲 当第一首歌曲完成时-voidAudioPlayerDifinishPlaying:成功:调用 如果我用那个代码,它就行了 - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { NSString *tempString = @"/"; tempString = [tempString stringByAppendingSt
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSString *tempString = @"/";
tempString = [tempString stringByAppendingString:name];
NSString *path = [NSString stringWithFormat:@"%@",[[NSBundle mainBundle] resourcePath]];
path = [path stringByAppendingString:tempString];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error;
AVAudioPlayer *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[AppDelegate getAppdelegate].audioPlayerForPlay = audioPlayer101;
[[AppDelegate getAppdelegate].audioPlayerForPlay play];
}
它起作用了
但是,如果我没有将实例放在音频播放器的perdefined属性中,它将不会播放
这是密码
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSString *tempString = @"/";
tempString = [tempString stringByAppendingString:name];
NSString *path = [NSString stringWithFormat:@"%@",[[NSBundle mainBundle] resourcePath]];
path = [path stringByAppendingString:tempString];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error;
AVAudioPlayer *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[audioPlayer101 play];
}
ARC代码
AVAudioPlayer *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[audioPlayer101 play];
对于非圆弧,将编译为
AVAudioPlayer *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[audioPlayer101 play];
[audioPlayer101 release];
并且audioPlayer101将在创建后立即释放,因为系统不会自动保留它,并释放lead以使播放停止
如果使用instance.audioPlayerForPlay=audioPlayer101;就像您的代码一样,而且audioPlayerForPlay的属性很强,该播放将由实例保留,因此该播放可以继续播放。您可以尝试将audioPlayerForPlay设置为“弱”,之前的代码将无法播放。长话短说,请参见上面评论中的链接,ARC在您创建audioPlayer101后立即释放您的audioPlayer101;最简单的修复方法是创建storng ivar,就像在您的第一段代码中,在AppDelegated中有ivar一样。在我的场景中,我有多个音频播放器同时播放,我需要每个音频播放器的实例。是否有任何解决方案可以完美地实现第二个测试用例。