0
我接手有細微瑕疵代碼庫 - 音頻播放器變爲靜音,未註冊的崩潰,行爲古怪等如何轉換代碼正常釋放內存
我找到了一種方法挑起的一個實例這個問題並追蹤到這個代碼片段:
- (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];
}
當我註釋掉二號線(零),並添加釋放到了最後,這個問題將停止。
[self.audioPlayer release];
- 我在哪裏何去何從?
- Nils在整個代碼中都以類似的方式使用(並可能導致類似的問題) - 是否有一種安全的方法來刪除它們?
- 我是新來的內存管理 - 我怎麼才能從糟糕的零使用中辨別正確的零用法?
該= nil不釋放(我想它可能)。我試過它來代替發行版,但碰到了這個bug。 – BankStrong 2010-04-19 12:59:02
它確實 - 它釋放屬性的前一個值,這就是爲什麼它是多餘的,因爲下一行的賦值完全相同(以及進行賦值)。如果該屬性在別處被引用,則替換最終(缺失)版本可能會導致其他問題。 – 2010-04-19 13:12:38
現在有道理 - 謝謝你的解釋。 – BankStrong 2010-04-19 13:19:43