1

当我使用终端命令capp gen MyProject创建新的 Cappuccino 项目时,我得到了 AppController.j,它使用了许多 Foundation 和 AppKit 类,但只有一个 import 语句

@import <Foundation/CPObject.j>

卡布奇诺导入系统如何工作?应用程序如何知道 AppController.j 中使用的 CPNotification、CPWindow、CPTextField 和其他类。

谢谢!

4

1 回答 1

1

大多数导入都是多余的,但拥有它们很好,因为它有助于我们的静态分析工具在您构建生产时帮助去除代码。

index.html 和 index-debug.html 页面上定义了两个“环境”变量。见这里

OBJJ_INCLUDE_PATHS 基本上是 objj 在导入框架/库代码时要查看的位置列表。因此,例如,您这样做:

@import <Foundation/CPObject.j>

代替:

@import "Foundation/CPObject.j>

那是因为Foundation/CPObject.j存在于Frameworks中。所以 Doing@import "Frameworks/Foundation/CPObject.j与使用尖括号完全相同。

这意味着您将框架代码移动到您想要的任何目录,并且通过使用尖括号语法,我们能够在没有真实路径的情况下找到这些文件。


那么,您的应用程序如何知道所有其他未直接导入的类呢?好吧,如果您注意到我在上面链接到的索引文件中,还有另一行指定 objj 可以在哪里找到 main()。在该文件的顶部 main.j 导入 Foundation 和 AppKit 框架:请参阅此处

我们可以跟踪这些导入,并看到 CPWindow.j 在 AppKit.j 的第 109 行被导入。

因此,由于 AppKit.j 为您导入了大部分 AppKit,因此依赖于 CPWindow(例如)的类不应该手动导入它……但它肯定不会受到伤害(文件永远不会被导入两次)。

但由于 AppKit 和 Foundation 对您自己编写的类一无所知,因此您确实需要手动导入这些类。

于 2012-09-06T20:15:03.573 回答