我在Mac上用xcode / cocoa编写了一个应用程序。 主窗口上的标签在每次出现带有[label setStringValue]的重循环时都会更改,但只在循环结束时才会刷新。 如何在每次出现时刷新它?
谢谢!
答案 0 :(得分:1)
您应该使用队列。 backgroundQueue 中的重要循环和 mainQueue 中的[label setStringValue]。
示例:
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
});
});
答案 1 :(得分:1)
你的问题是你在主线程上做了工作(循环)。主线程负责更新UI,不得阻止!
您需要启动一个新线程来完成繁重的工作并在主线程上更新您的UI。
你应该看看GCD,这是一个很好的轻量级解决方案,或者看一下performSelector ...方法。