关于xcode:可可应用程序main()函数去哪里了?

 2021-04-08 

Where does a cocoa app main() function go?

我正在尝试构建一个超级简单的Cocoa应用程序,该应用程序基本上具有一个带有while循环的功能(例如main())。它会执行一些操作,执行卷曲请求,然后等待几秒钟,然后重新开始。

我已经用所有必需的变量和函数在XCode中设置了所有项目,但是我不知道将main()函数放在哪里可以完成所有工作。

我在哪里定义主要功能?


可可非常面向事件驱动的编程。为此,main()函数通常只启动主运行循环,然后应用程序委托可以启动它想做的任何事情。也就是说,编写使用main()进行非复杂事件的非事件可可程序当然是可能的。在这种情况下,它的工作原理与C.

基本相同。

"充满爱的可可"刚刚发表了一篇有关极简主义可可编程的文章,这可能会引起人们的兴趣。它使用main()做一些工作。我实际上不建议您在自己的应用程序中模拟它,但是肯定有可能。


如果您按照通常的Cocoa架构设计应用程序,则实际上不会在自己的主代码中放置任何代码。整个应用程序应该是事件驱动的(事件是诸如来自用户的UI交互,网络事件等)。

也就是说,有一个主要功能。如果您已在XCode中创建了默认的Cocoa项目,则主函数将位于名为" main.m"的文件中。它将像C中的主要功能一样运行。您将看到那里有一个对NSApplicationMain()的调用。这就是启动Cocoa应用程序运行的过程(创建应用程序,加载主nib文件,开始运行主运行循环等)。 NSApplicationMain()直到应用程序退出后才返回,因此,如果您真的想将内容放入main()中,则需要将其放在对NSApplicationMain()的调用之上。

同样,这不是正常的"可可方式",但是如果没有更多关于您想做什么的信息,很难为您提供更多建议。


正如其他人回答的那样,可以按照建议的方式来实现您想做的事情,即通过在main内运行while循环来实现。

但是,这不是编写Cocoa应用程序的最佳方法,该应用程序会在几秒钟内重新加载一次URL。在不同的环境中,有不同的标准方式来做事。因此,有时您需要取消学习已习惯的知识。您可能已经想到:我想做X。在语言/环境A中,我应该像P一样编写X。现在,我想使用语言/环境B。我应该如何实现P?那不是适应新环境的方法。只是问,我应该在B环境中怎么做X

最可可的方式是这样:

  • 打开XCode,创建一个新项目,然后从模板中选择一个Cocoa GUI应用程序。
  • 在应用程序委托中,实现applicationDidFinishLaunching:。我们将设置一个NSTimer

    1
    2
    3
    4
    5
    6
    7
    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
          NSTimer*timer=[NSTimer scheduledTimerWithTimeInterval:5
                                                         target:self
                                                       selector:@selector(timerFired:)
                                                       userInfo:nil
                                                        repeats:YES];
    }

    这将创建一个计时器,该计时器每五秒钟触发一次,每次触发时,它将调用由self指定的应用程序委托自身的方法timerFired:。有关NSTimer的更多信息,请阅读此Apple文档。

  • 实施timerFired:

    1
    2
    3
    4
    - (void)timerFired:(NSTimer*)theTimer{
          // do whatever you want. you can use plain C to invoke curl,
          // or if you want you can use Cocoa methods to access a URL.
    }
  • 没有第四步!

  • main函数由模板提供。它调用NSApplicationMain,这将设置可可系统。最终,它为您调用了代表的applicationDidFinishLaunching:。您回复该消息。然后,您设置一个计时器。计时器调用您为您指定的方法。然后,您再次响应该消息。基本上就是可可的工作方式。可可系统要求您做某事,所以您要做某事。与您在Applescript中编写的程序相比,您对程序流程的控制变得相当被动。


    要添加到Andrew Madsen的答案中,最好的做法是从Xcode项目模板开始。它会为您设置一个骨骼main(),XIB,plist和其他标准可可材料。