0

我正在开发一款游戏,起初看起来运行得很好,但是.......在它运行了很长时间之后,声音首先停止工作,[[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 返回一个空值,稍后当我尝试通过 view.image= 将视图设置为等于新图像时,我在控制台中收到一个错误,显示许多文件已打开,ImageIO: CGImageRead_mapData 'open' failed '/ Users/deno/Library/Application Support/iPhone Simulator/5.1/Applications/5A0C777C-70D1-4AA0-8D7B-04A1F734C932/cPetCakes.app/twinkles04fin32.png' 错误 = 24(打开的文件太多)

现在我创建一个新的,每次播放声音时我都会创建一个新的 AVAudioPlayer 对象。我应该重新使用该对象还是如何释放它???由于我没有使用分配器,我在想对象会被自动释放???

声音代码

-(void) PlaySound: (NSString *) name
{
    NSURL *url;

    if ( [name compare:@"chasdog"]==0)
        url  = [[NSBundle mainBundle]
                       URLForResource:name
                       withExtension:@"wav"];

        else
    url  = [[NSBundle mainBundle]
             URLForResource:name
             withExtension:@"mp3"];

    NSError *error;

    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    audioPlayer.volume=1.0;
    audioPlayer.numberOfLoops= 0;
    [audioPlayer play];
    audioPlayer.delegate = self;    

}

不再加载新图像的代码

 self.image=gPetCakeB[gGame->mPetCakeId];
4

1 回答 1

0

在播放器委托中,一旦播放器停止播放,就需要释放它:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
    [player release];
}
于 2012-05-31T00:53:20.830 回答