Reputation: 419
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:
- (void)playNextArrayObject {
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];
Upvotes: 0
Views: 64
Reputation: 19789
Your change is correct - the =nil line is a noop, and the release is necessary following the alloc/init. Using self.something = nil can be good practice; it releases the current value of a property, and makes sure that you can't make invalid access to the freed memory.
Good memory management is simple. But you should read the Cocoa Memory Management Guide for explicit instructions.
Upvotes: 1