即时通讯编程为mac与可可,并有一个巨大的内存使用问题的录像机应用程序。Mac OSX可可应用程序需要大量RAM与垃圾回收
当启动应用程序时,我有一个窗口有两个按钮,我可以更改视图和一个简单的自定义视图,其中网络摄像机加载。只是这个视图需要21mb的RAM,当我按下其中一个按钮时,我将自定义视图更改为从凸轮记录的内容的QTMovie。
每当我改变看法我的应用程序用大约10mb的ram填充upp,并且永不停止。我有垃圾收集。即使我展示了QTMovie的视图并且想要按下按钮以再次显示它,它也需要更多的内存。加载子视图
代码,从按钮
if ([myCurrentViewController view] != nil)
[[myCurrentViewController view] removeFromSuperview];
NSViewController* cameraViewController2 = [[NSViewController alloc] initWithNibName:@"kVideo" bundle:nil];
if (cameraViewController2 != nil)
{
myCurrentViewController = cameraViewController2;
}
[myTargetView addSubview: [myCurrentViewController view]];
触发而这正是该videoView负载时会发生什么,而这需要RAM的10MB我希望它显示每次。
-(void)playMovie
{
[movieView setMovie:nil];
NSString* moviePath = [NSBundle pathForResource:@"tempFile" ofType:@"mov" inDirectory:@"/Users/Shared/"];
QTMovie* movie = [[QTMovie alloc] initWithFile:moviePath error:nil];
[movieView setMovie:movie];
}
- (void)awakeFromNib
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent3:) name:@"updateVideoPlayer" object:nil];
[self playMovie];
}
你可以通过运行没有GC(也假设没有泄漏),验证它是否有垃圾收集的东西(或没有)。取决于视频的大小,分配大小可能是合理的。仪器(或类似工具)会指出谁在创建这些分配,哪些是在什么呼叫中。从磁盘上传输和显示视频的总共30 MB并不一定很糟糕 - 这取决于条件。 – justin 2011-02-15 14:01:16
如果我关闭垃圾回收,并且不做任何手动内存管理,当我更改视图时,应用程序崩溃,如果我执行一些手动dealloc,我似乎得到与刚发现的垃圾回收相同的问题。 – tobros91 2011-02-15 14:13:00