cocoa app main()函数在哪里?

时间:2010-09-22 03:05:40

标签: cocoa xcode macos

我正在尝试构建一个超级简单的Cocoa应用程序,基本上是一个具有一个while循环的函数(例如,main())。它会做一些事情,做一个卷曲请求,然后在重新开始之前等待几秒钟。

我的项目都在XCode中设置了所有必要的变量和函数,但我不知道在哪里放置我的main()函数来完成所有工作。

我在哪里定义主要功能?

4 个答案:

答案 0 :(得分:7)

Cocoa非常注重事件驱动的编程。为此,main()函数通常只启动主runloop,然后应用程序委托可以启动它想做的任何事情。也就是说,编写一个使用main()的非基于事件的可可程序当然可以做更复杂的事情。在这种情况下,它的工作原理与C中的基本相同。

Cocoa With Love刚刚有一篇关于Minimalist Cocoa programming的帖子可能会引起关注。它使用main()来做一些工作。这不是我推荐在你自己的应用程序中模拟的东西,但它肯定是可能的。

答案 1 :(得分:5)

如果您根据通常的Cocoa架构设计应用程序,那么您并不真正将自己的代码放在main中。整个应用程序应该是事件驱动的(事件是来自用户的UI交互,网络事件等)。

那说,有一个主要功能。如果您在XCode中创建了一个默认的Cocoa项目,那么main函数将位于一个名为“main.m”的文件中。它将像C中的main函数一样运行。您将看到NSApplicationMain()中有一个调用。这就是启动Cocoa应用程序运行的原因(创建应用程序,加载主nib文件,开始运行主运行循环等)。 NSApplicationMain()在应用程序退出之前不会返回,所以如果你真的想把东西放在main()中,你需要把它放在对NSApplicationMain()的调用之上。

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

答案 2 :(得分:4)

正如其他人已经回答的那样,可以按照您建议的方式实施您想要执行的操作,即在while内运行main循环。

然而,这不是编写Cocoa应用程序的最佳方式,它会在几秒钟内重新加载一次URL。在不同的环境中,有一种不同的标准方式来做事。所以,你有时需要取消学习你习惯的东西。你可能想过:我想做X。在语言/环境A中,我的编码类似于P来执行X。现在我想使用语言/环境B。我该如何实施P?这不是适应新环境的方法。请问,我应该如何X在环境中B

最可可式的方式是:

  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. 实施timerFired:

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

  5. main功能由模板提供。它调用NSApplicationMain,它建立了Cocoa系统。最后,它会为您的代理人调用applicationDidFinishLaunching: 。您回复该消息。然后你设置一个计时器。计时器会调用您为指定的方法。然后再次回复该消息。这基本上是Cocoa的工作方式。 Cocoa系统要求你做某事,所以你要做点什么。与您在Applescript中编程的相比,您对程序流程的控制变得相当被动。

答案 3 :(得分:2)

要添加到Andrew Madsen的答案中,最好的办法是从Xcode项目模板开始。它会为你设置一个骨架main(),一个XIB,一个plist和其他标准的Cocoa东西。