我正在使用AVAudioPlayer,我再次使用声音和agian并在我的应用程序中调用此方法100次。问题是我总是alooc它但是当我要发布时,声音不起作用。 我该怎么办。
-(void) ButtonSound
{
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Button1"
ofType:@"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
[player play];
[fileURL release];
}
内存泄漏且应用程序崩溃,我想立即分配播放器并一次又一次地使用它。
答案 0 :(得分:4)
你可以这样做
在你的头文件上,声明播放器已经
AVAudioPlayer *buttonSoundPlayer;
然后执行
-(void)playButtonSound {
if(buttonSoundPlayer == nil) {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Button1" ofType:@"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];
buttonSoundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
[fileURL release];
}
[buttonSoundPlayer play];
}
答案 1 :(得分:1)
将您的代码更改为:
-(void) ButtonSound
{
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Button1"
ofType:@"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];
if (player) {
[player release];
}
player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
[player play];
[fileURL release];
}
您还需要在player
方法中发布dealloc
。您也可能需要在单击按钮时检查player
是否已在播放,如果是这样,可能会跳过此方法。
您可能还需要retain
您的玩家对象,但这取决于您的声明方式(未在示例中显示)。
答案 2 :(得分:0)
-(void) ButtonSound
{
NSBundle *mainBundle = [NSBundle mainBundle];
NSError *error;
NSURL *audioURL = [NSURL fileURLWithPath:[mainBundle pathForResource:@"Button1" ofType: @"mp3"]];
AVAudioPlayer *player1 = [(AVAudioPlayer*) [AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];
self.player = player1;
[self.player play];
[player1 release];
}
此代码没有错误,我没有发现任何泄漏使用此代码