views:

114

answers:

0

Sorry, having difficulty formattin code to appear correct here???

I am trying to understand the readings I get from running instruments on my app which are telling me I am leaking memory. There are a number, quite a few in fact, that get reported from inside the Foundation, AVFoundation CoreGraphics etc that I assume I have no control over and so should ignore such as:

Malloc 32 bytes: 96 bytes, AVFoundation, prepareToRecordQueue

or Malloc 128 bytes: 128 bytes, CoreGraphics, open_handle_to_dylib_path

Am I correct in assuming these are something the system will resolve?

But then there are leaks that are reported that I believe I am responsible for, such as:

This call reports against this line leaks 2.31KB

[self createAVAudioRecorder:frameAudioFile];

Immediately followed by this:

-(NSError*) createAVAudioRecorder: (NSString *)fileName {     

    // flush recorder to start afresh 
    [audioRecorder release]; 
    audioRecorder = nil; 

    // delete existing file to ensure we have clean start 
    [self deleteFile: fileName]; 

    VariableStore *singleton = [VariableStore sharedInstance]; 

    // get full path to target file to create 
    NSString *destinationString = [singleton.docsPath stringByAppendingPathComponent: fileName]; 

    NSURL *destinationURL = [NSURL fileURLWithPath: destinationString]; 

    // configure the recording settings 
    NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] initWithCapacity:6];       //******  LEAKING 384 BYTES 

    [recordSettings setObject:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey];   //***** LEAKING 32 BYTES 

    float sampleRate = 44100.0; 
    [recordSettings setObject:[NSNumber numberWithFloat: sampleRate] forKey: AVSampleRateKey];   //***** LEAKING 48 BYTES 

    [recordSettings setObject:[NSNumber numberWithInt:2]  forKey:AVNumberOfChannelsKey]; 

    int bitDepth = 16; 
    [recordSettings setObject: [NSNumber numberWithInt:bitDepth] forKey:AVLinearPCMBitDepthKey];   //***** LEAKING 48 BYTES 

    [recordSettings setObject:[NSNumber numberWithBool:YES] forKey:AVLinearPCMIsBigEndianKey]; 

    [recordSettings setObject:[NSNumber numberWithBool: NO]forKey:AVLinearPCMIsFloatKey]; 

    NSError *recorderSetupError = nil; 

    // create the new recorder with target file 
    audioRecorder = [[AVAudioRecorder alloc] initWithURL: destinationURL settings: recordSettings error: &recorderSetupError];       //***** LEAKING 1.31KB 

    [recordSettings release]; 

    recordSettings = nil; 

    // check for erros 

    if (recorderSetupError) { 

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Can't record" message: [recorderSetupError localizedDescription] delegate: nil cancelButtonTitle: @"OK" otherButtonTitles: nil]; 

            [alert show]; 
            [alert release]; 

            alert = nil; 
            return recorderSetupError; 
    } 

    [audioRecorder prepareToRecord];  //***** LEAKING 512 BYTES 

    audioRecorder.delegate = self; 

    return recorderSetupError; 
} 

I do not understand why there is a leak as I release audioRecorder at the start and set to nil and I release recordSettings and set to nil? Can anyone enlighten me please? Thanks