最近我开始了一个项目,可以将一些预先计算的Grafix/Audio导出到文件中,以便后续处理。表单和线程内存问题
所有我做的是我的主要XIB把一个新的窗口(与progressindicator和中止按钮),并使用下面的代码打开一看:
[NSApp beginSheet: REC_Sheet modalForWindow: MOTHER_WINDOW modalDelegate: self didEndSelector: nil contextInfo: nil];
NSModalSession session=[NSApp beginModalSessionForWindow:REC_Sheet];
RECISNOTDONE=YES;
while (RECISNOTDONE) {
if ([NSApp runModalSession:session]!=NSRunContinuesResponse)
break;
usleep(100);
}
[NSApp endModalSession:session];
后台线程(并行线程)更早开始,实际执行工作并保存所有targas/wave文件。其中的工作很好,但经过一段时间后,事实证明,主线程没有响应了,我的记忆足迹抬升势不可挡。我试着用Instruments进行调试,并看到很多CFHash等东西都在向无穷大发展。
偶然我点击了下面的表单,并暂时它帮助,主线程(AppKit?)释放它的东西,但只是一段时间。
我无法向我解释,首先我认为这是从我的线程访问进度条更新进度(间隔0.5秒),所以我把它剪掉了。但即使我没有更新任何内容,也没有对进度条进行任何操作,但我的应用程序因为没有释放它的“主要事件”或任何东西而吃掉了所有内存。
有没有可能“流失”这个主线程内存的东西(Runloop/NSApp调用?)。以及为什么主线程不再响应(在这个简单的任务之后)?
我没有眼镜了,请帮忙!
在此先感谢!
P.S.你们如何实现“线程长任务”的东西,并更新你的gui?
在Instruments中,查看分配CFHash的内容。 – 2010-04-06 12:13:29