私はMPMoviePlayerViewControllerを使ってiOSでビデオを再生しています。ビデオが停止またはクラッシュすると、私はこのView Controllerを閉じてリリースしたいと思います。クラッシュをシミュレートするために、私は存在しないファイルパスに渡されました:これは直後にコールバックをトリガする再生終了後に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
は、2番目の通知がまだ送信されている間に割り当てが解除されます。私の質問は、この警告をどうやって取り除くのですか?通常の再生終了時にはMPMovieFinishReasonPlaybackEnded
しか発行されないので、2つの通知を連続して受信するたびにリリースするようにハードコードすることはできません。
私はまだ同じ警告を受け取ります。 – JoJo