我接管了一个有微妙缺陷的代码库 - 音频播放器静音,未记录的崩溃,奇怪的行为等。
我找到了一种方法来激发问题的一个实例,并将其跟踪到此代码段:
- (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];
}
当我注释掉第二行(nil)并在最后添加一个版本时,此问题就会停止。
[self.audioPlayer release];
答案 0 :(得分:1)
您的更改是正确的 - = nil行是noop,并且必须在alloc / init之后释放。使用self.something = nil可以是很好的做法;它释放属性的当前值,并确保您无法对释放的内存进行无效访问。
良好的内存管理很简单。但是你应该阅读Cocoa Memory Management Guide以获得明确的指示。