我必須在iphone卡遊戲循環中播放一個whoosh聲音,並且使用下面仍然存在內存泄漏的聲音。 還有什麼可以做,以避免泄漏?AVAudioPlayer內存泄漏
// AVAudioPlayer ------------------------------------------- --------------------------------------
NSAutoreleasePool *audioDataspool = [[NSAutoreleasePool alloc] init]; // pool is created
{
NSString *soundpath = [[NSBundle mainBundle] pathForResource:@"cardwhoosh" ofType:@"mp3"];
NSData *audioData = [[NSData dataWithContentsOfFile:soundpath]autorelease];
AVAudioPlayer *player = [[AVAudioPlayer alloc]initWithData:audioData error:NULL];
soundpath = nil;
[soundpath release];
[player play];//play sound
player = nil;
[player release];
[player autorelease];
audioData = nil;
[audioData release];
}
[audioDataspool release]; // all your autoreleased objects are released
感謝您的幫助。你是對的我對存儲器管理了解不多,我會讀一讀。當使用你的代碼時,它不會播放聲音,只有當我的播放器=零;首先,但是這並不能防止泄漏,正如你所提到的那樣。 – 2011-04-24 18:28:37
請通過編寫適當的方法在AVAudioPlayer上包含autorelease來幫助我* player = [[AVAudioPlayer alloc] initWithData:audioData error:NULL];所以我可以嘗試NSAutorelease runloop。 – 2011-04-24 18:33:26
我現在明白了'AVAudioPlayer'一旦釋放就會停止播放(這真的很正常,但我從來沒有想到過)。你可以做的最好的事情就是讓'player'成爲一個實例變量並將它釋放到'dealloc'中,這樣它就會被釋放。爲了節省一些內存,您還可以實施委託協議,以便在播放完成後釋放音頻播放器。我不會詳細討論這一點,請搜索代表團和協議。 – Joost 2011-04-24 18:55:00