2010-11-09 4 views
1

Это, казалось бы, простой API. Я думал, что я неправильно выпустил объект AVAudioRecorder, но даже после устранения этой проблемы, я все еще получаю сообщение об утечке.утечка из 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% ответственности [recorder prepareToRecord];

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

ответ

0

Я смог устранить эту утечку.

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

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

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

Смежные вопросы