objective-c - 在 Cocoa 中,main.m 类的目的是什么?

标签 objective-c cocoa

它只是坐在那里...我如何独立于 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/

相关文章:

ios - PHAssetCollection fetchAssetCollectionsWithType 崩溃

objective-c - 在 iOS 中使用 Obj-C 解析文本文件

ios - 来自initWithString的NSURL对象给出-[NSURL长度]错误

iphone - Objective-C++ 支持多少 C++

Cocoa JSON - 检查数组还是字典

不使用CPU电源的Cocoa Lock

ios - 在 iOS 中从服务器更新应用程序资源

php - 如何将 PHP mysql_fetch_array() 转换为 NSMutableArray? PHP --> Xcode

cocoa - NSArrayController 绑定(bind)到 NSTableView 中的一对多关系

objective-c - CTFontManagerRegisterGraphicsFont 不注册姓氏