How to convert code to properly release memory
- by BankStrong
I've taken over a code base that has subtle flaws - audio player goes mute, unlogged crashes, odd behavior, etc.
I found a way to provoke one instance of the problem and tracked it to this code snippet:
NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:[[soundsToPlay objectAtIndex:count] description]
ofType:@"mp3"]];
self.audioPlayer = nil;
self.audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:soundURL error:nil];
self.audioPlayer.delegate = self;
AudioSessionSetActive(YES);
[audioPlayer play];
When I comment out the 2nd line (nil) and add a release to the end, this problem stops.
[self.audioPlayer release];
Where do I go from here?
Nils are used in a similar fashion throughout the code (and may cause similar problems) - is there a safe way to remove them?
I'm new to memory management - how can I discern proper nil usage from bad nil usage?