objective-c - 如何在 Cocoa 应用程序的主线程中运行自定义代码
问题描述
我是一名 Windows 开发人员,我很难理解在 NSApplication 的主线程中运行代码的正确方法。
我的大部分代码都在 cvdisplaylink 线程中运行(它是一个 opengl 应用程序)问题是我不能从中调用 NSOpenPanel 之类的东西 - 它会使应用程序崩溃并警告只从主线程运行这样的东西。
没关系,但据我了解,主线程是完全不透明的,我只能让它处理事件。NSApp sendAction 方法听起来很有希望——因为我可以明确指定要调用的方法。但它没有“发送”任何东西,它只是直接从同一个线程调用这个方法。
我理解对了吗?我是否必须将某种自定义事件(可能是 NSEventTypeApplicationDefined)推送到主线程队列才能正常工作?如果是这样,我该如何响应这样的自定义事件?
解决方案
像这样:
dispatch_async(dispatch_get_main_queue(), ^{
// do whatever
});
推荐阅读
- xamarin - 如何拦截来自 WKWebview 的 XHR 调用?
- cocoapods - Swift 'Charts' pod 警告
- verilog - RGB 到 YUV 的转换方程
- vue.js - Webpack 构建后使用 Vue 组件
- python - 修复内部服务器错误 heroku/flask
- python - Keras fit() 和 fit_generator() 给出不同的结果
- java - 如何解决没有“com.luv2code.springdemo.service.CategoriesService”类型的合格bean?
- java - 当 maven/jenkins 构建在外部停止/中止时,如何自动终止 Java (PID) 进程?
- azure - Azure 1.5TB VM 的本地灾难恢复设置
- ajax - 模型未在 mvc 的 ajax 调用响应中定义