утечка из AVAudioRecorder - PullRequest
       30

утечка из AVAudioRecorder

1 голос
/ 09 ноября 2010

Это, казалось бы, простой API.Я подумал, что вообще неправильно выпускаю объект AVAudioRecorder, но даже после устранения этой проблемы я все еще получаю сообщение об утечке.

Вот четыре метода, которые я использую для обработки записи:

-(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];



}

Я получаю несколько утечек (при работе на устройстве):

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:]

Утечки говорят мне, что мой звонок, на который я на 100% ответственен, - [рекордер prepareToRecord];

Кто-нибудь видел это или мог бы дать мне понимание?

1 Ответ

0 голосов
/ 09 ноября 2010

Мне удалось устранить эту утечку.

В исходном коде я сгенерировал NSURL из строки NSString и сохранил ее в свойстве.

Каждый раз, когда я выделял AVAudioRecorder, я передавал ему этот NSURL непосредственно из свойства.

Сохраняя расположение моего файла как переменную экземпляра NSString, а затем каждый раз создавая новый NSURL из этой строкии передавая этот новый NSURL моему недавно выделенному AVAudioRecorder, он работает и не производит этих утечек.

...