假设我刚刚创建了一个 Cocoa 应用程序。我有三个文件:AppDelegate.h、AppDelegate.m 和 MainMenu.xib。
如果我不碰任何东西并运行应用程序,编译器是否真的编译 AppDelegate.h 和 AppDelegate.m 即使我没有写任何东西?
编译器如何知道要包含哪些文件?
假设我刚刚创建了一个 Cocoa 应用程序。我有三个文件:AppDelegate.h、AppDelegate.m 和 MainMenu.xib。
如果我不碰任何东西并运行应用程序,编译器是否真的编译 AppDelegate.h 和 AppDelegate.m 即使我没有写任何东西?
编译器如何知道要包含哪些文件?
您的问题非常笼统,但我将概述一些高级细节。当你在 Xcode 中创建一个新项目时,你选择一个项目模板作为它的基础。在您的情况下,听起来您使用了简单的 Cocoa Application 模板。这将为您提供 AppDelegate.h、AppDelegate.h 和 MainMenu.xib 以及项目导航器中“支持文件”文件夹下列出的一些其他文件。我们稍后会谈到其中的一些。首先请注意,在您的新项目目录的顶层是一个类似于 MyProject.xcodeproj 的文件。这实际上是打包在一起的目录,看起来像一个文件,其中有一个名为 project.pbxproj 的文件。此文件是一个 XML 文件,其中包含构建的所有设置。它由项目模板预先配置以构建一个简单的应用程序。默认 project.pbxproj 中指定的基本构建过程是:
如果您查看 main.m,您会发现它看起来很像旧样式的 main.c,但它运行的是NSApplicationMain()
. 此函数最终创建项目中 Info.plist 中列出的“主体类”的实例。默认情况下NSApplication
,这是 Cocoa 提供的标准类。然后加载“主 nib 文件基本名称”,即项目的 MainMenu.xib。nib 文件基本上只是一堆“冻干对象”,它们被实例化并在它们之间建立连接。MainMenu.xib 文件中的对象之一是 的实例AppDelegate
,这就是此代码被加载到内存中的方式。在默认模板AppDelegate
中什么都不做,MainMenu.xib 只包含一个标准的应用程序菜单栏和一个空白窗口。这是您在运行应用程序时将看到的。
在编写一行代码之前,您可以免费获得所有这些作为起点。此时,Cocoa 编码人员通常会开始填写AppDelegate
.xml 文件、编写新类或为 UI 的其他部分添加新的 nib 文件。