Я использую MPMoviePlayerController в своем приложении для iPhone, чтобы иногда показывать несколько коротких видеоклипов.Я объявил категорию, которая объявляет пару методов к классу, чтобы правильно прикрепить его представление к определенному представлению и удалить его оттуда.Я использую систему уведомлений, чтобы сообщить классу, когда фильм закончился, и пытаюсь удалить его.Вот методы в категории:
- (void)setViewInCurrentController{
LPAppDelegate * appDelegate = [[UIApplication sharedApplication] delegate];
self.view.frame = CGRectMake(0, 0, 320, 480);
self.view.alpha = 0.0;
[appDelegate.window addSubview:self.view];
[UIView beginAnimations:@"FadeIn" context:nil];
[UIView setAnimationDuration:0.3];
[UIView setAnimationBeginsFromCurrentState:YES];
self.view.alpha = 1.0;
[UIView commitAnimations];
}
- (void)removeViewInCurrentController{
[UIView beginAnimations:@"FadeOut" context:nil];
[UIView setAnimationDuration:0.3];
[UIView setAnimationBeginsFromCurrentState:YES];
self.view.alpha = 0.0;
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
[UIView commitAnimations];
}
А вот где я использую MPMoviePlayer:
- (void)playVideoNarration:(VideoNarration *)vNarr{
MPMoviePlayerController *player = [[MPMoviePlayerController alloc]
initWithContentURL:[NSURL fileURLWithPath:vNarr.videoURI]];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(videoNarrationFinishedPlaying:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:player];
[player setViewInCurrentController];
player.controlStyle = MPMovieControlStyleNone;
[player play];
}
- (void)videoNarrationFinishedPlaying:(NSNotification *) aNotification{
MPMoviePlayerController * player = [aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:player];
[player removeViewInCurrentController];
[player release];
}
Видео показывается правильно, а затем проигрыватель удаляется из видадумаю, оно тоже освобождается, но когда я вижу приложение с Инструментом Распределения Инструментов, я вижу, что выделенная память достигает 20+ МБ и не освобождается после завершения проигрывателя.Ответственным за распределение является библиотека под названием VideoToolBox.
Нет утечек, кроме некоторых из библиотеки AudioToolBox.Есть предположения о том, что происходит?