AVAudioPlayer泄漏?

我有一个问题,不知道如何处理它。 Tyringbuild立一个声音和animation的应用程序。 它给了我一个1级,然后2级记忆警告。 我已经尝试过构build和分析,并且得到了所有这些潜在的泄漏。 如果我释放audio声音将不会播放。 任何提示?

这里是代码的一部分和我得到的leakes

- (IBAction)playsound2 { NSString *path = [[NSBundle mainBundle] pathForResource:@"cat" ofType:@"mp3"]; AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; *- **Method returns an Objective-C object with a +1 retain count (owning reference)*** theAudio.delegate = self; [theAudio play]; ***- Object allocated on line 302 and stored into 'theAudio' is no longer referenced after this point and has a retain count of +1 (object leaked)*** cat1.hidden = 0; cat.hidden = 1; [cat1 startAnimating]; cat.center = cat1.center; [self performSelector:@selector(loadAnimations) withObject:nil afterDelay:1.0]; catLabel.hidden = 0; } 

是迄今为止所提出的同样问题的解决scheme。

  - (AVAudioPlayer *)audioPlayerWithContentsOfFile:(NSString *)path { NSData *audioData = [NSData dataWithContentsOfFile:path]; AVAudioPlayer *player = [AVAudioPlayer alloc]; if([player initWithData:audioData error:NULL]) { [player autorelease]; } else { [player release]; player = nil; } return player; } 

而更好的主意,你可以按照这个。

您必须为AVAudioPlayer类实例声明一个实例variables。

 //Instance variable: { AVAudioPlayer* theAudio; } - (IBAction)playsound2 { NSString *path = [[NSBundle mainBundle] pathForResource:@"cat" ofType:@"mp3"]; if (!theAudio ) { theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; if (theAudio ) { theAudio.delegate = self; [theAudio play]; } } cat1.hidden = 0; cat.hidden = 1; [cat1 startAnimating]; cat.center = cat1.center; [self performSelector:@selector(loadAnimations) withObject:nil afterDelay:1.0]; catLabel.hidden = 0; }