【问题标题】:MPMoviePlayerController released, but memory usage still highMPMoviePlayerController 已发布,但内存使用率仍然很高
【发布时间】:2014-09-11 22:01:47
【问题描述】:

我正在使用 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 是 MPMoviePlayerController 的子类,用于观察 _moviePlayer 的释放。

现在我确定 _moviePlayer 在我离开这个 VC 后被释放(因为我在 ZXMPMoviePlayerController 的 dealloc 方法中打印了日志),但我的应用程序的内存使用率仍然很高,这是一个测试演示,除了movieplayer,vc是干净的。 我想它一定是_moviePlayer的东西还在内存中,就像其他东西的缓存一样,我不知道......

有什么想法吗?帮助...

在.h中

@interface ZXMPMoviePlayerController : MPMoviePlayerController

@end

在.m #import "ZXMPMoviePlayerController.h"

@implementation ZXMPMoviePlayerController


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

@end

【问题讨论】:

标签: ios objective-c memory mpmovieplayercontroller


【解决方案1】:

您好,请确保您使用@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];


}

【讨论】:

  • 我试过这个,但不工作..顺便说一下..我正在使用 ARC :-) 通常,如果这个内存可以自动释放,当我的应用程序进入后台时,内存使用量会下降,但是当我的应用程序进入后台时,内存一直很高......
  • 你应该尝试使用 iOS 仪器。查找内存泄漏。
  • 也请显示你是dealoc方法,
  • 我在ZXMPMoviePlayerController的dealloc方法中打印了log,弹出这个VC后控制台显示log,所以我认为是deallocated。
  • 显示你正在实现这个电影播放器​​的整个文件。
【解决方案2】:

取消选中编辑方案下的启用僵尸对象选项。然后再试一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-07
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多