【问题标题】:Command Line Tools in CocoaCocoa 中的命令行工具
【发布时间】:2010-01-06 21:12:48
【问题描述】:

我创建了一个输出“hello world”的简单命令行工具。这是在 main() 函数中完成的。

在一个单独的应用程序中,我可以创建一个 NSTask,通过管道输入 hello world 工具的输出并成功使用它。

不过,我需要我的命令行工具做的是每秒输出一些东西(我正在简化它)。在其他地方,我为此使用了 NSTimer 没有问题,但是在 main() 函数中创建 NSTimer 并不能让我将“self”设置为目标(我猜是因为它不是对象)?

构建这个的正确方法是什么?该工具只需要每秒输出一次“hello world”,直到进程停止(由将其作为 NSTask 启动的应用程序)?

【问题讨论】:

    标签: cocoa


    【解决方案1】:

    sleep() 函数呢?

    int main(...) {
      while(1) {
        printf("Hello world!\n");
        sleep(1);
      }
      return 0;
    }
    

    【讨论】:

    • 我考虑过 - 所以这是一个好的方法吗?只是循环一个睡眠命令,直到进程终止?也许我只是花了太长时间思考它并且忘记了简单的解决方案。如何将 printf 语句替换为对 main 之外的另一个函数的调用,我将把这个函数放在哪里?在 main() 的正下方?不确定语法,或者在哪里看 - 现在感觉更像是 C 编程而不是 OO,这很好,但我从大学以来就没有做过!
    • 你正在使用Objective-C,所以创建一个对象,将它的头文件导入main.m,然后使用[[YourObject alloc] init]main()中实例化它。然后,您可以像在任何 Cocoa 应用程序中一样使用它。确保你有一个自动释放池,或者如果你希望该工具被垃圾收集,你已经调用了objc_startCollectorThread()
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      我的方法是创建一个类(单独或在 main.m 文件中)。为此,请编写(在#import 语句下)

      @interface TimerClass : NSObject

      /*类方法,所以“+”号 */ + (void) callFunction;

      @结束

      然后

      @implementation TimerClass

      。 + (void)timerRespond:(NSTimer*)aTimer {

      // 调用你的命令行工具

      }

      并在main函数中调用NSTimer,使其时间间隔为1,调用TimerClass类的timerRespond。

      这应该可以正常工作(可能有一些错误,因为我没有使用 Xcode 检查)。告诉我它是否有效。祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多