AVAudioPlayer не освобождает память - PullRequest
1 голос
/ 08 января 2010

Я инициализирую переменную ivar AVAudioPlayer, играю и пытаюсь освободить ее память. После строки релиза он не устанавливается в 0x0. После нулевой строки оно не меняется на 0x0. Требуется ли AVAudioPlayer что-то особенное для освобождения памяти?

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource: @"mysound" ofType: @"aif" inDirectory:@"/"]] error: &err];
audioPlayer.numberOfLoops = 0;
audioPlayer.volume = .5;
[audioPlayer prepareToPlay];
[audioPlayer play];
[audioPlayer release];
audioPlayer = nil;

Ответы [ 2 ]

2 голосов
/ 08 января 2010

Ну

AVAudioPLayer воспроизводит аудиофайлы асинхронно. Не запускайте проигрыватель после начала воспроизведения, это может привести к некоторой ошибке, связанной с памятью, и ваш аудиофайл может не воспроизводиться.

Вы должны освободить игрока через avaudioplayerdelegate. Для более подробной информации вы можете проверить этот ответ тоже .

Надеюсь, это поможет.

Спасибо

Madhup

1 голос
/ 08 января 2010
 - (IBAction) playaction {

        NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"songname" ofType:@"mp3"];
        NSURL *newURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
        self.soundFileURL = newURL;
        [newURL release];
        [[AVAudioSession sharedInstance] setDelegate: self];
        [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil];

    // Registers the audio route change listener callback function
    AudioSessionAddPropertyListener (
                                     kAudioSessionProperty_AudioRouteChange,
                                     audioRouteChangeListenerCallback,
                                     self
                                     );

    // Activates the audio session.

    NSError *activationError = nil;
    [[AVAudioSession sharedInstance] setActive: YES error: &activationError];

    AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: soundFileURL error: nil];
    self.appSoundPlayer = newPlayer;
    [newPlayer release];
    [appSoundPlayer prepareToPlay];
    [appSoundPlayer setVolume: 1.0];
    [appSoundPlayer setDelegate: self];
    [appSoundPlayer play];

}

Здесь appSoundPlayer объявлен в заголовочном файле как

AVAudioPlayer *appSoundPlayer;

Это свойство, объявленное и синтезированное, также выпущенное в методе dealloc как

[appSoundPlayer release];
...