Xcode 循环刷新窗口

Xcode 循环刷新窗口,xcode,cocoa,loops,window,refresh,Xcode,Cocoa,Loops,Window,Refresh,我在Mac上用xcode/cocoa编写了一个应用程序。 主窗口上的标签在每次出现重循环时都会使用[label setStringValue]进行更改,但仅在循环结束时刷新。 如何在每次事件中刷新它 谢谢 您应该使用队列。您在backgroundQueue中的重循环和mainQueue中的[label setStringValue] 例如: dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_P

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


谢谢

您应该使用队列。您在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
    });

});

您的问题是在主线程上执行工作(循环)。主线程负责更新UI,不能被阻止

您需要启动一个新线程来完成繁重的工作,并在主线程上更新UI


你应该看看GCD,这是一个很好的轻量级解决方案,或者看看performSelector。。。方法。

NSAutoreleasePool不是阻止主运行循环的解决方案!解决方案是使用一个新线程来完成工作(循环)并更新主runloop上的标签。。带着魁克。。看看这个!“您还可以使用队列。backgroundQueue中的重循环和mainQueue中的[label SetTringValue]应该可以工作。”您说“您应该使用NSAutoreleasePool”,而这作为对他的问题的回答是错误的。“你也可以使用队列”只是你的第二个提示,不是很强。谢谢,今晚我会试试!只是一个简单的问题。调度队列(mainQueue)应该在我的循环中还是在我的循环之后?我相信…应该在你的循环中,就像我写的例子一样。