Это, казалось бы, простой 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];
Кто-нибудь видел это или мог бы дать мне понимание?