【发布时间】:2013-05-13 18:40:41
【问题描述】:
我正处于需要调用系统命令的项目中。我最初开始查看 NSTask(因为这似乎是最流行的方法),但最近我刚刚遇到了 system 命令。它看起来比 NSTask 更容易设置。我看到一些问题/答案说 NSTask 是更好的方法,但我没有看到
- 两者的优缺点是什么
- 在什么情况下,一种比另一种更有可能被使用
任何帮助/链接/想法/想法? (是的..我做了谷歌搜索)
【问题讨论】:
标签: objective-c nstask
我正处于需要调用系统命令的项目中。我最初开始查看 NSTask(因为这似乎是最流行的方法),但最近我刚刚遇到了 system 命令。它看起来比 NSTask 更容易设置。我看到一些问题/答案说 NSTask 是更好的方法,但我没有看到
任何帮助/链接/想法/想法? (是的..我做了谷歌搜索)
【问题讨论】:
标签: objective-c nstask
NSTask:
NSStrings,而无需进行大量转换。system(3) 在所有 Apple 平台(如 iOS)上得到更好的支持——我认为 system 甚至不能在 iOS 上运行。system(3):
/bin/sh 会。对于 Cocoa 应用程序,我总是使用 NSTask;我只使用system,如果我正在做一些必须是C的事情,或者我知道必须在非Mac环境下运行。事实上,system 非常脆弱,更强大的解决方案是使用fork-exec,因为它允许您更好地控制流和并发操作。
【讨论】:
fork-exec 一个没有严重风险的 Cocoa 进程。它可以工作,但非常脆弱(NSTask 在实现中做了很多事情来避免这种脆弱性)。
fork,然后是立即的exec,但您最好通过NSTask,它会进行一些内部恶作剧以使其安全。更好的是编写一个通过 XPC 与之通信的助手守护程序。启动一项新的小型任务效率更高。
存在一些差异。对于他们中的一些人来说,一般来说,这是否是一种优势可能很难说。
在没有重新检查文档的情况下,这是我脑海中的一些差异。这是一个概述。
【讨论】: