gotear de AVAudioRecorder
-
29-09-2019 - |
Pregunta
Es una API aparentemente simple. Pensé que estaba liberando de forma incorrecta el objeto AVAudioRecorder por completo, pero incluso después de la eliminación de esa preocupación, todavía estoy consiguiendo una fuga informó.
Aquí hay son los cuatro métodos que utilizo para la grabación de mango:
-(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];
}
consigo múltiples fugas (cuando se ejecuta en el dispositivo):
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:]
Las fugas me dice que la llamada que estoy haciendo esto es 100% responsable es [grabador prepareToRecord];
Alguien ha visto esto o me puede dar una idea?
Solución
I fue capaz de eliminar esta fuga.
En el código que Iniciado, que genera un NSURL de un NSString y se almacena en el que una propiedad.
Cada vez que le asigna un AVAudioRecorder, que pasó este NSURL directamente de la propiedad.
Mediante el almacenamiento de mi ubicación del archivo como una variable de instancia NSString y luego crear una nueva NSURL cada vez desde esta cadena y la aprobación de esta NSURL fresca a mi AVAudioRecorder recién asignada, funciona y no produce estas fugas.