Утечка памяти AVAudioRecorder

Я надеюсь, что кто-то может поддержать меня в этом ...

Я работал над приложением, которое позволяет конечному пользователю записать небольшой аудиофайл для последующего воспроизведения, и я нахожусь в процессе тестирования на утечки памяти. Я продолжаю очень последовательно сталкиваться с утечкой памяти, когда метод «stop» AVAudioRecorder пытается закрыть аудиофайл, в который он записывает. Это действительно кажется утечкой в ​​самой структуре, но если я тупица, вы можете сказать мне.

Чтобы проиллюстрировать это, я разработал урезанное тестовое приложение, которое ничего не делает, кроме запуска / остановки записи нажатием кнопки. Ради простоты, все происходит в приложении. делегировать следующим образом:

@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];
}

Трассировка стека от Instruments, которая довольно ясно показывает, что метод "closeFile" в коде AVFoundation протекает ... что-то. Вы можете увидеть скриншот сеанса инструментов здесь:Форумы разработчиков: AVAudioRecorder Memory Leak

Любые мысли будут с благодарностью!

Ответы на вопрос(3)

Ваш ответ на вопрос