Il s'agit d'une API apparemment simple. Je pensais que je relâchais incorrectement l'objet AVAudioRecorder, mais même après avoir éliminé ce problème, je reçois toujours une fuite.fuite de AVAudioRecorder
Voici les quatre méthodes que j'utilise pour gérer l'enregistrement:
-(void) startRecording {
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:&err];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
NSError *err;
err = nil;
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:audioFileURL settings:nil error:&err];
//show user an error on fail
if (!recorder) {
NSLog(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:[err localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
return;
}
[recorder prepareToRecord];
recorder.delegate = self;
recorder.meteringEnabled = NO;
self.isRecording = YES;
[self colorRecordingLight];
[self toggleButtons:3];
[recorder record];
self.audioRecorder = recorder;
[recorder release];
}
-(void) stopRecording {
[audioRecorder stop];
[self cleanupPostRecording];
}
-(void) audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag {
//if this page didn't have audio before, it does now.
self.hasAudio = YES;
[self cleanupPostRecording];
}
-(void) cleanupPostRecording {
[[AVAudioSession sharedInstance] setActive:NO error:nil];
self.isRecording = NO;
[self setAudioRecorder:nil];
[self toggleButtons:4];
[self colorRecordingLight];
}
Je reçois plusieurs fuites (lors de l'exécution sur l'appareil):
Leaked Object # Address Size Responsible Library Responsible Frame
NSCFDictionary 0x16dc20 64 AVFoundation prepareToRecordQueue(AVAudioRecorder*, AudioRecorderImpl*)
GeneralBlock-32 0x16cf00 32 AVFoundation prepareToRecordQueue(AVAudioRecorder*, AudioRecorderImpl*)
NSCFNumber 0x160f30 16 Foundation -[NSPlaceholderNumber initWithUnsignedInteger:]
Fuites me dit que l'appel que je suis ce qui rend 100% responsable est [recorder prepareToRecord];
Quelqu'un a vu ceci ou pourrait me donner un aperçu?