使用什么Objective-C IPC机制



我有一个应用程序,它维护一组自定义类的嵌套对象。该应用程序需要能够在更改时与具有非常相似的自定义提供程序补丁的多个Quartz Composer组合共享其数据。QC成分在此应用程序中运行。

QC补丁只能在其输入上处理有限的对象类型,所以我的自定义类似乎无法在那里工作。我也很犹豫是否要将组合硬连接到我的应用程序,因为每当我添加新的组合时,都需要添加新的Objective-C代码。

我尝试过分布式对象,尽管有人警告我不要使用它们。我发现它们太不可靠了。由于我的QC补丁程序以60fps的速度运行,他们试图频繁访问供应商的对象,以至于我无法在出现故障时在连接崩溃之前正常关闭连接。

现在,我正在使用分布式通知,每次发生变化时都会向我的QC补丁发送更新字典,这大约是每秒一次。我将我的自定义类序列化到字典中,这样我就可以做到这一点,然后在最多5个接收此数据的补丁实例中的每个实例中对字典进行反序列化。这是有效的,但似乎效率低下,我担心潜在的延迟和丢弃消息的警告。我的补丁需要以非常及时的方式接收更新(不到.1秒,越快越好),并且不会掉包。

对我来说,将数据从应用程序获取到自定义QC补丁的最佳机制是什么?

谢谢!Adam

如果你想让它达到高级,XPC是最好的选择(它甚至得到了一个很好的更新,可以在Mountain Lion中直接与Objective-C一起使用它(看看以NSXPC为前缀的类和协议))。如果这太慢了(不应该,因为XPC非常轻量级),你可以试着回到mach消息,这是几乎所有类型的IPC在OS X上都使用的东西。但是!通过MIG生成mach消息很麻烦,所以你应该先尝试XPC,只有当它太慢时,才尝试mach消息。

关于如何创建XPC服务的概述可以在这里找到

最新更新