0

我一直在做一个理论上应该无限期工作的项目。这意味着您启动了程序,将 Ipad 连接到电源,它可以工作数天、数月、数年等。我面临这样一个事实,无论我做什么,内存都是逐渐分配的,但没有释放。Instruments Leaks 显示没有内存泄漏,但在 Instruments Allocations 和 Activity Monitor 中,内存是逐渐分配的,它越来越大。有很多地方会发生,尤其是在播放视频时 一个简单的例子(Xcode 4.3,无 ARC):

视图控制器.h

@interface ViewController : UIViewController
{
    MPMoviePlayerController *player;

}

视图控制器.m

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    player = [[MPMoviePlayerController alloc] initWithContentURL:    [NSURL URLWithString:@"http://mysite.com/movie.mp4"]];

    player.view.frame = CGRectMake(400, 500, 360, 240);
    [self.view addSubview:player.view];
    player.controlStyle = MPMovieControlStyleNone;
    player.repeatMode = MPMovieRepeatModeOne;  
    [player play];
}

- (void)viewDidUnload
{
      [player stop];
      [player.view removeFromSuperview];
      [player release];
      [super viewDidUnload];
}

- (void)dealloc 
{
    [player release];
    [super dealloc];
}

这个简单的应用程序什么也不做,只是循环播放视频。每 3 分钟平均分配 100kb。每天 - 平均 40MB。我正在使用 Instruments Activity Monitor 进行分析。随着时间的推移,应用程序会死掉。怎么了?为什么内存在增长,当我只看视频(循环播放)而不初始化新对象时?

4

1 回答 1

0

用于预加载输入流的缓存只有在再次加载或关闭应用程序时才会自行刷新,否则它会不断累积数据。一旦关闭应用程序并再次打开,内存分配就会在那里。基本上不是内存泄漏。

您还需要在使用后删除 MPMoviePlayerController 通知。您还必须释放玩家对象。

你在哪里使用 [player.view removeFromSuperview];

于 2012-05-12T05:54:19.387 回答