简体   繁体   English

MPMoviePlayerController已发布,但内存使用率仍然很高

[英]MPMoviePlayerController released, but memory usage still high

I'm using MPMoviePlayerController play online video (I'm using ARC), here's the code: 我正在使用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];

ZXMPMoviePlayerController is a subclass of MPMoviePlayerController in case of observing the deallocation of _moviePlayer. 如果观察到_moviePlayer的重新分配,则ZXMPMoviePlayerController是MPMoviePlayerController的子类。

Now I'm sure _moviePlayer is deallocated(because I printed log in dealloc method of ZXMPMoviePlayerController) after I leave this VC (VC is deallocated also.), but the memory usage of my app is still high, This is a test demo, the vc is clean except the movieplayer. 现在,我确定_moviePlayer被释放了(因为我在退出该VC后也打印了ZXMPMoviePlayerController的dealloc方法中的日志)(VC也被释放了),但是我的应用程序的内存使用率仍然很高,这是一个测试演示, vc是干净的,除了movieplayer。 I think it must be something of _moviePlayer is still in memory, like cache of something else, I have no idea... 我认为一定是_moviePlayer仍在内存中,就像其他内容的缓存一样,我不知道...

Any ideas? 有任何想法吗? Help... 救命...

in .h 在.h中

@interface ZXMPMoviePlayerController : MPMoviePlayerController

@end

in .m #import "ZXMPMoviePlayerController.h" 在.m #import“ ZXMPMoviePlayerController.h”中

@implementation ZXMPMoviePlayerController


- (void)dealloc
{
    NSLog(@"%s",__FUNCTION__);
}

@end

Hi to be sure that you release memory wrap all code with @autoreleasepool . 您好,请确保您释放内存, @autoreleasepool使用@autoreleasepool将所有代码包装@autoreleasepool In the dealloc you should clean your memory. 在dealloc中,您应该清理内存。 When you are using dealloc method you should check if all object are release to avoid memory leaks. 使用dealloc方法时,应检查是否释放了所有对象,以避免内存泄漏。

- (void)dealloc
{
   [moviePlayer_ release];
    moviePlayer_ = nil;
}

This how you should call video player. 这就是您应该如何调用视频播放器。

@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];


}

Uncheck Enable Zombie Objects option under Edit Scheme. 取消选中“编辑方案”下的“启用僵尸对象”选项。 And try again. 然后再试一次。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM