AVAudioPlayer Утечки и предупреждения, и в конце мое приложение падает - PullRequest
1 голос
/ 04 мая 2011

Я использую AVAudioPlayer и снова запускаю звук, снова вызываю и вызываю этот метод 100 раз в своем приложении. Проблема в том, что я всегда отключаю его, но когда я собираюсь выпустить, звук не работает. что мне делать.

-(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];

}

память утечка и приложение падает, я хочу выделить плеер сразу и использовать его снова и снова.

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

Вы можете сделать что-то вроде этого

в своем заголовочном файле, объявить плеер уже

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 голос
/ 04 мая 2011

Измените свой код на это:

-(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 ваш объект игрока, но это зависит от того, какВы объявили это (не показано в вашем примере).

0 голосов
/ 05 мая 2011
-(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];
}

Этот код не содержит ошибок, и с помощью этого кода я не обнаружил утечек

...