代码之家  ›  专栏  ›  技术社区  ›  davethegr8 Community Driven Business

cocoa app main()函数的作用是什么?

  •  1
  • davethegr8 Community Driven Business  · 技术社区  · 15 年前

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

    我已经在Xcode中设置了所有必要的变量和函数,但是我不知道把完成所有工作的main()函数放在哪里。

    在哪里定义主要功能?

    4 回复  |  直到 15 年前
        1
  •  4
  •   Yuji    15 年前

    正如其他人所回答的,以您建议的方式实现您想要做的事情是可能的,即通过运行 while 环内 main .

    然而, 这不是编写可可应用程序的最佳方法 它会在几秒钟内重新加载一个URL。在不同的环境中,有不同的标准方式来做事情。所以,有时候你需要不去了解你已经习惯了什么。你可能会想:我想这么做 X . 在语言/环境中 A ,我要编码如下 P X . 现在我想使用语言/环境 B . 我应该如何实施 ?这不是适应新环境的方法。问一下,我该怎么办 X 在环境中 ?

    最像可可的方式是:

    1. 打开xcode,创建一个新项目,从模板中选择一个cocoa gui应用程序。
    2. 在应用程序委托中,实现 applicationDidFinishLaunching: . 我们要建立一个 NSTimer .

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

      这将创建一个计时器,该计时器在五秒钟内触发一次,并且每次触发时都调用该方法 timerFired: 应用程序委托本身的,由指定 self . 更多关于 NSTIMER ,读 this apple document .

    3. 实施 TimeFix: .

      - (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.
      }
      
    4. 没有第四步!

    这个 主要的 功能由模板提供。它叫 NSApplicationMain 建立了可可体系。最终,它会 应用程序完成启动: 你的代表 为你 . 你回应了那条信息。然后设置一个计时器。计时器调用指定的方法 为你 . 然后你再次回复这个信息。可可就是这样工作的。可可系统要求你做些什么,所以你要做些什么。与在applescript中编程相比,您对程序流的控制变得相当被动。

        2
  •  7
  •   Lily Ballard    15 年前

    Cocoa非常面向事件驱动的编程。最后,main()函数通常只启动主运行循环,然后应用程序委托就可以启动它想做的任何事情。也就是说,可以编写一个非基于事件的cocoa程序,使用main()来完成更复杂的工作。在这种情况下,它的工作原理与在C中基本相同。

    可可与爱刚刚发表了一篇关于 Minimalist Cocoa programming 这可能很有趣。它使用main()来完成一些工作。这并不是我推荐的在你自己的应用程序中模仿的东西,但它确实是可能的。

        3
  •  5
  •   Andrew Madsen    15 年前

    如果你按照通常的Cocoa架构设计你的应用程序,你不会把你自己的代码放在主要位置。整个应用程序应该是事件驱动的(其中事件是用户界面交互、网络事件等)。

    也就是说,有一个主要功能。如果您已经在Xcode中创建了一个默认的cocoa项目,那么主函数将位于一个名为“m a in.m”的文件中。它将像C中的主函数一样运行。您将看到有一个对nsApplicationMain()的调用。这就是启动Cocoa应用程序运行的原因(创建应用程序、加载主NIB文件、开始运行主运行循环等)。nsApplicationMain()在应用程序退出之前不会返回,因此如果您真的想将内容放入main()中,则需要将其置于对nsApplicationMain()的调用之上。

    再说一次,这不是通常的“可可方式”,但如果没有更多关于你想做什么的信息,很难给你更多的建议。

        4
  •  2
  •   Graham Perks    15 年前

    要添加到AndrewMadsen的答案中,最好的做法是从Xcode项目模板开始。它将为您设置一个骨骼主()、一个XIB、一个PLIST和其他标准的可可制品。