我释放了 MPMoviePlayerController 但内存分配和事件对象仍然高于对象分配之前。但是,如果我重新分配对象,它不会泄漏更多。 我的应用程序实际上使用了很多媒体文件并且内存消耗很高。我想完全释放不需要的内存以避免内存警告。
电影播放器版本:
player.initialPlaybackTime = -1;
[player.view removeFromSuperview];
[player stop];
[player release];
电影播放器分配:
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"video0_hd.mov" ofType:nil]];
player = [[MPMoviePlayerController alloc] initWithContentURL:url];
player.view.frame = placeholder.frame;
[self.view addSubview:player.view];
[player play];
最佳答案
我也有这个问题。
iPad 用于预加载视频流的缓存未完全清空。 所以每次,这个带有视频播放器的页面都会被清理释放,清理后分配的内存仍然包含缓存内存。对于大视频,这可能高达 50 MB。
这实际上不是内存泄漏:
如果再次打开该页面,则重新分配缓存。但是仍然令人沮丧,因为你想要一个干净的退出情况,这意味着当这个页面被留下并被清理时,这个页面使用的所有内存都应该被释放,包括用于缓存视频流的内存......!
经过一些认真的调整后,这一系列命令似乎可以完成工作:
======================
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:myMoviePlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerDidExitFullscreenNotification
object:myMoviePlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerLoadStateDidChangeNotification
object:myMoviePlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMovieDurationAvailableNotification
object:myMoviePlayer];
[myMoviePlayer pause];
myMoviePlayer.initialPlaybackTime = -1;
[myMoviePlayer stop];
myMoviePlayer.initialPlaybackTime = -1;
[myMoviePlayer.view removeFromSuperview];
[myMoviePlayer release];
=================================
步骤:
1 - 删除您用于电影播放器的所有通知程序。
2 - 暂停电影
3 - 设置播放时间开始
4 - 停止电影
5 - 再次设置播放时间开始
6 - 现在删除电影 View
7 - 最后释放电影播放器
在我的情况下,我的 iPad (OS 4.2) 上的视频缓存也被释放了。 并留下一个干净的分配内存情况,等于打开视频播放器页面之前的大小。所以同样进入和退出内存。
希望这对你有帮助......
关于iphone - MPMoviePlayerController 仍然泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3384388/