我正在使用 MPMoviePlayerController 播放在线视频(我正在使用 ARC),代码如下:
_moviePlayer = [[ZXMPMoviePlayerController alloc] init];
_moviePlayer.view.frame = CGRectMake(0, 100, 320, 320);
_moviePlayer.controlStyle = MPMovieControlStyleNone;
[self.view addSubview:_moviePlayer.view];
NSString *sourcePathStr = @""; //video url
_moviePlayer.contentURL = [NSURL URLWithString:sourcePathStr];
_moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
[_moviePlayer prepareToPlay];
[_moviePlayer play];
在观察 _moviePlayer 的释放情况下,ZXMPMoviePlayerController 是 MPMoviePlayerController 的子类。
现在我确定 _moviePlayer 在我离开这个 VC 后被释放了(因为我在 ZXMPMoviePlayerController 的 dealloc 方法中打印了日志)(VC 也被释放了。),但是我的应用程序的内存使用率仍然很高,这是一个测试演示,除了电影播放器外,vc 是干净的。 我认为它一定是 _moviePlayer 的某些东西仍在内存中,就像其他东西的缓存,我不知道......
有什么想法吗?帮助...
在 .h 中
@interface ZXMPMoviePlayerController : MPMoviePlayerController
@end
以.m为单位 #import "ZXMPMoviePlayerController.h"
@implementation ZXMPMoviePlayerController
- (void)dealloc
{
NSLog(@"%s",__FUNCTION__);
}
@end
最佳答案
您好,请确保您使用 @autoreleasepool
释放内存包装所有代码。在 dealloc 中,您应该清理内存。当您使用 dealloc 方法时,您应该检查是否所有对象都已释放以避免内存泄漏。
- (void)dealloc
{
[moviePlayer_ release];
moviePlayer_ = nil;
}
您应该如何调用视频播放器。
@autoreleasepool
{
[_moviePlayer release];
_moviePlayer = nil;
_moviePlayer = [[ZXMPMoviePlayerController alloc] init];
_moviePlayer.view.frame = CGRectMake(0, 100, 320, 320);
_moviePlayer.controlStyle = MPMovieControlStyleNone;
[self.view addSubview:_moviePlayer.view];
NSString *sourcePathStr = @""; //video url
_moviePlayer.contentURL = [NSURL URLWithString:sourcePathStr];
_moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
[_moviePlayer prepareToPlay];
[_moviePlayer play];
}
关于ios - MPMoviePlayerController 已发布,但内存使用率仍然很高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25781249/