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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top