它只是坐在那里...我如何独立于 UI 操作运行代码(例如,不仅响应按钮按下)?我试图在 awakeFromNib 之前初始化一些对象并运行一些脚本。我该怎么做呢?
最佳答案
In Cocoa, what is the purpose of the main.m class?
没有,因为没有。
一方面,.m 文件不是类。 .h 也不是。将类的 @interface
放在 .h(头文件)文件中并将它的 @implementation
放在 .m(实现)文件中的做法是一种约定,仅此而已。这是一个很好的约定,但它并没有被语言强制执行。
因此,.m 文件包含零个或多个类实现。通常,它恰好是一个。有时是两个,另一个是一个小型私有(private)类,其 @interface
也在同一个文件中。
main.m 不包含类。它通常只包含一个函数,名为main
。
main
来自 C(Objective-C 是它的超集),是程序的入口点:它是程序开始运行的地方。一切都在这里发生,或者在从这里调用的函数中发生。通过 main
返回,命令行工具通常也会在这里退出。
Cocoa 应用程序中的大多数main
函数都是项目模板附带的默认函数;此实现简单地尾调用 NSApplicationMain
,它设置共享的 NSApplication 对象并启动它运行。该函数永远不会返回;当用户退出 Cocoa 应用程序时,该过程将直接退出。
您可能想阅读 this list of important facts about Cocoa and Objective-C我写的。听起来您有一些误解(可能是从您更熟悉的另一个框架中引入的),该列表可以为您澄清。
How do I run code independently of UI actions (as in, not only in response to a button push)?
这取决于您何时尝试这样做。例如,周期性操作将是 timer 的工作。 .
I'm trying to initialize some objects and run some scripts BEFORE i awakeFromNib. How do I do this?
您可以在 initWithCoder:
中执行此操作,它被发送到从存档实例化的每个非 View 层对象,包括您的。 Nib 也是文件。
您也可以考虑成为应用程序委托(delegate)并实现 a applicationWillFinishLaunching:
method .
第三种方法是将代码填充到 main
中。请注意,这里几乎任何 Cocoa 代码都可能记录“no autorelease pool”。 ” 警告,除非您将其包装在 @autoreleasepool
语句中;其他解决方案没有这个问题,因为 NSApplication 已经为你创建了一个自动释放池。
关于objective-c - 在 Cocoa 中,main.m 类的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2237244/