我正在使用MPMoviePlayerViewController在iOS中播放視頻。當視頻停止或崩潰時,我想關閉此視圖控制器並將其釋放。爲了模擬崩潰,我已經通過了一個不存在的文件路徑:如何在播放完成後釋放MPMoviePlayerViewController?
MPMoviePlayerViewController* p = [
[MPMoviePlayerViewController alloc] init
];
self.player = p;
[p release];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.player.moviePlayer
];
self.player.moviePlayer.contentURL = @"purposelyFake.mp4";
這將立即觸發下面的回調。
- (void) moviePlayBackDidFinish
{
if (self.player != nil) {
[self.player.moviePlayer stop];
self.player = nil
}
}
self.player
是一個非原子保留的性質,因此它設置爲nil
應該釋放它。這將清除內存,但我的日誌顯示這樣的警告:
類AVPlayerItem被釋放,而關鍵 值觀察家仍用它註冊一個實例0x127b20。觀察信息是 泄漏,甚至可能被誤認爲是其他物體。 在NSKVODeallocateBreak上設置斷點,在調試器中停止。
原因是因爲moviePlayBackDidFinish
在視頻崩潰時被調用兩次。一次說MPMovieFinishReasonPlaybackEnded
,再說MPMovieFinishReasonPlaybackError
。當第二個通知仍在發送時,MPMoviePlayerViewController
變爲釋放狀態。我的問題是:我如何擺脫這個警告?請記住,在正常播放完成時,只發布MPMovieFinishReasonPlaybackEnded
,因此無論何時只要我連續收到兩個通知,我都無法將其硬編碼爲只發布。
試過了,我仍然得到相同的警告。 – JoJo 2012-03-22 21:34:24