我一直在做一个理论上应该无限期工作的项目。这意味着您启动了程序,将 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 进行分析。随着时间的推移,应用程序会死掉。怎么了?为什么内存在增长,当我只看视频(循环播放)而不初始化新对象时?