大多数导入都是多余的,但拥有它们是件好事,因为它有助于我们的静态分析工具在您为生产构建时帮助去除代码。
在 index.html 和 index-debug.html 页面上定义了两个“环境”变量。
见here。
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 框架:See Here。
我们可以follow 这些导入并看到CPWindow.j 被导入line 109 of AppKit.j。
因此,由于 AppKit.j 为您导入了大部分 AppKit,您依赖于 CPWindow 的类(例如)不应该手动导入它……但它肯定不会受到伤害(文件永远不会被导入两次)。
但由于 AppKit 和 Foundation 对您自己编写的类一无所知,因此您确实需要手动导入这些类。