我有一個在Mac上用xcode/cocoa編寫的應用程序。 使用[label setStringValue]每次出現重循環時,主窗口上的標籤都會更改,但僅在循環結束時刷新。 我怎樣才能在每次發生時刷新它?循環中的刷新窗口
謝謝!
我有一個在Mac上用xcode/cocoa編寫的應用程序。 使用[label setStringValue]每次出現重循環時,主窗口上的標籤都會更改,但僅在循環結束時刷新。 我怎樣才能在每次發生時刷新它?循環中的刷新窗口
謝謝!
你應該使用一個隊列。你的重循環backgroundQueue和[label setStringValue] mainQueue。
例子:
dispatch_queue_t backgroundQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(backgroundQueue,^{
//Your loop
dispatch_async(mainQueue,^{
//Set Label value
});
});
你的問題是,你在主線程工作(循環)。主線程負責更新用戶界面,不得被阻止!
您需要開始一個新線程來完成繁重的工作並在主線程上更新您的UI。
你應該看看GCD,這是一個很好的輕量級解決方案,或者看看performSelector方法。
NSAutoreleasePool不是阻止主循環的解決方案!解決方案是有一個新的線程來完成工作(循環)並更新主循環中的標籤。 – 2012-01-13 07:04:48
我也很傷心......和queque一起..看看這個! 「而且你也可以使用隊列。你在mainQueue中的backgroundQueue和[label setStringValue]中的重循環應該工作。」 – 2012-01-13 07:07:56
你說「你應該使用NSAutoreleasePool」,這是錯誤的作爲他的問題的答案。 「你也可以使用隊列」只是你的第二個暗示,而不是很強。 – 2012-01-13 07:10:44