最近我開始了一個項目,可以將一些預先計算的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