1

我初始化了一个 ivar AVAudioPlayer 变量,播放并尝试释放它的内存。在发布行之后,它不会设置为 0x0。在 nil 行之后,它不会更改为 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;
4

2 回答 2

2

好,

AVAudioPLayer 异步播放音频文件。开始播放后不要松开播放器,这可能会导致一些与内存相关的错误,并且您的音频文件也可能无法播放。

您应该通过 avaudioplayerdelegate 释放播放器。有关更多详细信息,您也可以查看此答案

希望这可以帮助。

谢谢,

马杜普

于 2010-01-08T04:24:28.867 回答
1
 - (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];
于 2010-01-08T04:40:21.900 回答