Objective C Multi thread NSWindow替代方案?

时间:2015-07-25 20:19:13

标签: objective-c core-foundation

在做的时候我一直在崩溃:

[NSWindow orderFront:nil]

从我在我的应用中生成的一个主题。使用来自线程的UI元素不可能像GTK +?

编辑: 哦善良刚发现这个: https://stackoverflow.com/a/11900929/1828637

所以显然我不能从另一个线程使用NSWindow,所以objc出来了,是否有可能用CoreFoundation做多线程窗口的东西呢?我必须从线程做,所以我寻找替代方式

2 个答案:

答案 0 :(得分:2)

UI交互总是必须在主线程上完成。

您只需在主线程上使用GCD调度有问题的代码:

dispatch_async( dispatch_get_main_queue(), ^(void)
{
   [NSWindow orderFront:nil];
});

答案 1 :(得分:2)

您只能使用主线程上的UI元素。

我使用GCD确保所有UI活动都在正确的线程上运行:

dispatch_sync(dispatch_get_main_queue(), ^{
    // Do your UI updates!
});

请参阅why

  

在Cocoa Touch中,UIApplication即应用程序的实例附加到主线程,因为该线程是由Cocoa Touch的入口点函数UIApplicatioMain()创建的。它设置主事件循环,包括应用程序的运行循环,并开始处理事件。应用程序的主事件循环接收所有UI事件,即触摸,手势等。