我正在解决一个问题,需要我在 64 位 Cocoa 应用程序中执行以下操作:
- 从我的应用程序中生成 32 位 Cocoa 辅助工具(命令行工具)。此帮助程序将打开一个文件(准确地说是一个 Quicktime 电影)并使用仅限 32 位的 API(Quicktime-C API)访问有关该文件的信息
- 从 32 位进程收集的数据需要传回 64 位应用程序。
- 64 位应用应等到 32 位进程完成后再继续
在 Cocoa 中有很多方法可以实现这一点,但据我所知,我可以采取两种方法。
选项 1:带管道的 NSTask
- 使用 NSTask 生成 32 位进程
- 将 NSTasks stdoutput 重定向到管道,并在 64 位进程中从该管道读取数据。
- 解析来自管道的数据,这将涉及将字符串从标准输出转换为数据(整数、 float 、字符串等)
选项 2:带有 NSDistributedNotificationCenter 的 NSTask
- 使用 NSTask 生成 32 位进程
- 当 32 位进程中的数据准备就绪时,向分布式通知中心发送 NSNotification,并在事件中包含包含所有相关数据的字典。
- 在 64 位应用中订阅相同的 NSNotification
所以我对 StackOverflowers 的问题是,哪个选项“更好”?
哪种做法更好?
哪个更有效率?
我倾向于选项 2,因为看起来涉及的代码会更少。如果这两种方法都不好,是否有更好的方法?
最佳答案
你说子进程将是一个应用程序。不要为此使用 NSTask — 它会混淆 Launch Services。 (如果您的意思是它是一个辅助工具,以便好奇的专家用户可以从命令行运行它,那么 NSTask 就可以了。)
DNC 可以以任何一种方式工作,但如果子进程确实是一个应用程序,请不要使用 NSTask+NSPipe - 使用分布式对象。
关于cocoa - Cocoa 中进程之间传递数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/504122/