2011-05-21 123 views
2

我有我的整个程序中使用声音文件:的Objective-C:如何释放内存AvAudioPlayer

NSString *soundPath1 = [[NSBundle mainBundle] pathForResource:@"mysound" ofType:@"mp3"]; 
NSURL *soundFile1 = [[NSURL alloc] initFileURLWithPath:soundPath1]; 
soundFilePlayer1 = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFile1 error:nil]; 
[soundFilePlayer1 prepareToPlay]; 

所以soundFilePlayer1在我.h文件中定义的,因为我需要它是全球性的。

现在...我需要释放soundFilePlayer1和soundFile1吗? (和soundPath1?)

如果是这样的话......我在哪里做到这一点? 我想我需要释放soundFilePlayer1在:(但我需要先停止它,因为它可能会打,当他们退出程序?)

- (void)dealloc { 
    [soundFilePlayer1 release]; 
} 

那其他文件...我在哪里释放那些? 谢谢

回答

1

记住一个简单的经验法则。只有在对象上调用了allocinitnew才能释放。所以,你会想发布soundFile1。另外,您也可以使用一个方便的方法,并有声音文件添加到自动释放池自动:

NSString *path = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"mp3"]; 
NSURL *file = [NSURL fileURLWithPath:path]; //autoreleased 
player = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil]; 

if([player prepareToPlay]){ 
    [player play]; 
} 

是的,你可以释放playersoundFilePlayer1)在dealloc,但如果你不是循环的音频文件有一个更好的方法。顺应AVAudioPlayerDelegate

@interface YourView : UIViewController <AVAudioPlayerDelegate> { //example 

然后在这里实现方法:

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { 
    //your audio file is done, you can release safely 
    [player release]; 
} 
+0

但如果我释放的球员,那么我需要我每次使用它没有时间重新分配呢? (我在程序中多次播放此文件..不循环,只是每次我在程序中执行某些操作时都播放) – foreyez 2011-05-21 03:08:56

+0

是的,您需要重新分配它。然而,如果你不经常使用它,你不想让玩家留在记忆中。最好保持较低的内存使用量。 – 2011-05-21 03:21:25