objective-c - NSTask vs System - 优点和缺点?

标签 objective-c nstask

我在一个项目中需要调用系统命令。我最初开始关注 NSTask(因为这似乎是最流行的方法),但最近我刚刚遇到了 system命令。它看起来比 NSTask 更容易设置。我已经看到一些问题/答案说 NSTask 是更好的方法,但我没有看到

  • 两者的优缺点是什么
  • 在什么情况下,一个比另一个更可能被使用

  • 任何帮助/链接/想法/想法? (是的..我做了谷歌搜索)

    最佳答案

    NSTask :

  • 可以在后台运行他的任务。允许您向底层进程发送中断和终止,并允许您挂起或恢复底层进程而无需自己设置线程。如果这是您想要的,也可以同步运行。
  • 让我们来回使用 Cocoa 类,例如 NSString s 无需进行大量转换。
  • 让我们为与调用者不同的底层进程设置 I/O 流。
  • system(3) 更好地支持所有 Apple 平台(如 iOS) -- 我不认为 system甚至适用于 iOS。
  • 需要 Cocoa 和 Objective-C。
  • 不解释 shell 参数或对参数进行路径扩展。
  • system(3) :
  • 更好地支持所有类 Unix 平台。
  • 可以使用单线运行任务。
  • 只需要 C。
  • 在 shell 中运行并将解释工作目录和参数,如 /bin/sh将。

  • 对于 Cocoa 应用程序,我总是使用 NSTask ;我只用system如果我正在做的事情必须是纯 C 的,或者我知道必须在非 Mac 环境下运行。事实上,system非常脆弱,更强大的解决方案是执行 fork - exec ,因为它允许您更好地控制流和并发操作。

    关于objective-c - NSTask vs System - 优点和缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16528891/

    相关文章:

    objective-c - 如何更改 NSURL 文件名

    ios - iOS 中的十六进制颜色不准确

    ios - 如何在 iOS 上自动调整照片(即调亮、对比度)?

    swift - 在 Swift 5 中正确执行 shell 命令

    cocoa - com.apple.xpc.launchd.oneshot

    objective-c - 如何从我的 Cocoa 应用程序在终端中运行命令?

    ios - UITableViewCell 内部的 UIPageViewController

    objective-c - 如何确定用于 Metal 顶点计算的线程组和线程大小

    swift - NSTask (whoami) 到字符串,到 NSTask (cp) 失败 - Swift

    objective-c - 在 NSTask 中使用 launchctl