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

dem*_*319 4 cocoa objective-c

它只是坐在那里......我如何独立于UI动作运行代码(如同,不仅仅是响应按钮按下)?我正在尝试初始化一些对象并在唤醒.FromNib之前运行一些脚本.我该怎么做呢?

Pet*_*sey 20

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

没有,因为没有一个.

首先,.m文件不是类.也不是.h.将类放入@interface.h(头文件)文件及其@implementation在.m(实现)文件中的做法是一种惯例,仅此而已.这是一个很好的约定,但它没有被语言强制执行.

因此,.m文件包含零个或多个类实现.通常,它只是一个.有时它是两个,另一个是一个小的私有类,@interface它也在同一个文件中.

main.m不包含任何类.它通常只包含一个名为的函数main.

main来自C(其中Objective-C是超集),并且是程序的入口点:它是程序开始运行的地方.一切都发生在这里,或者在这里调用的函数中.命令行工具通常也会通过main返回退出.

mainCocoa应用程序中的大多数功能都是项目模板附带的默认功能; 这个实现只是尾调用NSApplicationMain,它设置共享的NSApplication对象并启动它运行.那个功能永远不会回来 当用户退出Cocoa应用程序时,该过程就会退出.

您可能想要阅读我写的关于Cocoa和Objective-C的重要事实列表.听起来你有一些误解(可能是从你更熟悉的另一个框架中带来的),这个列表可以为你清理.

如何独立于UI操作运行代码(例如,不仅仅是响应按钮按下)?

这取决于你何时尝试这样做.例如,定期动作将是计时器的工作.

我正在尝试初始化一些对象并在唤醒.FromNib之前运行一些脚本.我该怎么做呢?

您可以执行此操作initWithCoder:,该文件将发送到从存档(包括您的存档)实例化的每个非视图层对象.笔尖也是档案馆.

你也可以考虑作为应用程序委托和实现一个applicationWillFinishLaunching:方法.

第三种方法是填充代码main.请注意,除非您将其包装在声明中,否则此处的任何Cocoa代码都可能会记录"无自动释放池 "警告@autoreleasepool; 其他解决方案没有此问题,因为NSApplication已经为您创建了自动释放池.