循环刷新窗口

时间:2012-01-12 21:29:00

标签: xcode cocoa loops window refresh

我在Mac上用xcode / cocoa编写了一个应用程序。 主窗口上的标签在每次出现带有[label setStringValue]的重循环时都会更改,但只在循环结束时才会刷新。 如何在每次出现时刷新它?

谢谢!

2 个答案:

答案 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 ...方法。