Я думаю, что следующее утверждение является источником утечки памяти,
player = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:&err];
Вот SO сообщения, которые обсуждали ту же проблему.
Утечка памяти в AVAudioPlayer
Утечка памяти в AVAudioPlayer
Утечка памяти в AVAudioPlayer - Media Player Framework
Вот пост в блоге
Утечка памяти в AVAudioPlayer
Согласно руководству по блогу ваш код должен выглядеть следующим образом.
-(void)setPlayer
{
NSURL *file = [[NSURL alloc] initFileURLWithPath:
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"shut up.mp3"]];
NSError *err = nil;
NSData *data = [NSData dataWithContentsOfFile:file];
AVAudioPlayer *player = [AVAudioPlayer alloc];
if([player initWithData:audioData error:NULL])
{
player.numberOfLoops = -1;
[player prepareToPlay];
player.volume=1.0;
[player autorelease];
}
else
{
[player release];
player = nil;
}
[file release];
}
Версия без утечек хранит указатель, возвращаемый alloc, а не указатель, возвращаемый initWithData: error :. Таким образом, что бы ни случилось, игрок все еще может быть освобожден.