首页 > 解决方案 > 如何在 Cocoa 应用程序的主线程中运行自定义代码

问题描述

我是一名 Windows 开发人员,我很难理解在 NSApplication 的主线程中运行代码的正确方法。

我的大部分代码都在 cvdisplaylink 线程中运行(它是一个 opengl 应用程序)问题是我不能从中调用 NSOpenPanel 之类的东西 - 它会使应用程序崩溃并警告只从主线程运行这样的东西。

没关系,但据我了解,主线程是完全不透明的,我只能让它处理事件。NSApp sendAction 方法听起来很有希望——因为我可以明确指定要调用的方法。但它没有“发送”任何东西,它只是直接从同一个线程调用这个方法。

我理解对了吗?我是否必须将某种自定义事件(可能是 NSEventTypeApplicationDefined)推送到主线程队列才能正常工作?如果是这样,我该如何响应这样的自定义事件?

标签: objective-cmacoscocoansevent

解决方案


像这样:

dispatch_async(dispatch_get_main_queue(), ^{
   // do whatever
});

推荐阅读