Vazamento de memória do AVAudioRecorder

Espero que alguém lá fora possa me apoiar nisso ...

Eu estou trabalhando em um aplicativo que permite ao usuário final gravar um pequeno arquivo de áudio para reprodução posterior e estou no processo de teste de vazamentos de memória. Continuo a encontrar um vazamento de memória de maneira muito consistente quando o método "stop" do AVAudioRecorder tenta fechar o arquivo de áudio no qual está sendo gravado. Isso realmente parece ser um vazamento na própria estrutura, mas se eu estou sendo um idiota, você pode me dizer.

Para ilustrar, desenvolvi um aplicativo de teste simplificado que não faz nada além de iniciar / parar uma gravação com o pressionar de um botão. Por uma questão de simplicidade, tudo acontece no aplicativo. delegue da seguinte maneira:

@synthesize audioRecorder, button;
@synthesize window;

- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
 // create compplete path to database
 NSString *tempPath = NSTemporaryDirectory();
 NSString *audioFilePath = [tempPath stringByAppendingString:@"/customStatement.caf"];

 // define audio file url
 NSURL *audioFileURL = [[NSURL alloc] initFileURLWithPath:audioFilePath];

 // define audio recorder settings
 NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:
      [NSNumber numberWithInt:kAudioFormatAppleIMA4], AVFormatIDKey,
      [NSNumber numberWithInt:1], AVNumberOfChannelsKey,
      [NSNumber numberWithInt:AVAudioQualityLow], AVSampleRateConverterAudioQualityKey,
      [NSNumber numberWithFloat:44100], AVSampleRateKey,
      [NSNumber numberWithInt:8], AVLinearPCMBitDepthKey,
      nil
 ];

 // define audio recorder
 audioRecorder = [[AVAudioRecorder alloc] initWithURL:audioFileURL settings:settings error:nil];
 [audioRecorder setDelegate:self];
 [audioRecorder setMeteringEnabled:YES];
 [audioRecorder prepareToRecord];

 // define record button
 button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 [button addTarget:self action:@selector(handleTouch_recordButton) forControlEvents:UIControlEventTouchUpInside];
 [button setFrame:CGRectMake(110.0, 217.5, 100.0, 45.0)];
 [button setTitle:@"Record" forState:UIControlStateNormal];
 [button setTitle:@"Stop" forState:UIControlStateSelected];

 // configure the main view controller
 UIViewController *viewController = [[UIViewController alloc] init];
 [viewController.view addSubview:button];

 // add controllers to window
 [window addSubview:viewController.view];
 [window makeKeyAndVisible];

 // release
 [audioFileURL release];
 [settings release];
 [viewController release];

 return YES;
}

- (void) handleTouch_recordButton {
 if ( ![button isSelected] ) {
      [button setSelected:YES];
      [audioRecorder record];

 } else {
      [button setSelected:NO];
      [audioRecorder stop];
 }
}

- (void) dealloc {
 [audioRecorder release];
 [button release];

 [window release];

 [super dealloc];
}

O rastreamento de pilha do Instruments mostra claramente que o método "closeFile" no código AVFoundation está vazando ... alguma coisa. Você pode ver uma captura de tela da sessão Instrumentos aqui:Fóruns de desenvolvedores: AVAudioRecorder Memory Leak

Qualquer pensamento seria muito apreciado!

questionAnswers(3)

yourAnswerToTheQuestion