当我使用终端命令capp gen MyProject创建新的Cappuccino项目时,我得到了AppController.j,它使用了许多Foundation和AppKit类,但只有一个导入语句
@import <Foundation/CPObject.j>
卡布奇诺进口系统是如何工作的?应用程序如何了解AppController.j.中使用的CPNotification、CPWindow、CPTextField和其他类
谢谢!
大多数导入都是多余的,但拥有它们很好,因为它有助于我们的静态分析工具在为生产构建时帮助剥离代码。
index.html和index-debug.html页面上定义了两个"环境"变量。请参见此处。
OBJJ_INCLUDE_PATH基本上是OBJJ在导入框架/库代码时要查找的位置列表。例如:
@import <Foundation/CPObject.j>
而不是:
@import "Foundation/CPObject.j>
这是因为Foundation/CObject.j位于框架内部。因此,执行@import "Frameworks/Foundation/CPObject.j
与使用尖括号完全相同。
这意味着你可以将你的框架代码移动到你想要的任何目录,通过使用尖括号语法,我们可以找到那些没有真正路径的文件。
那么,您的应用程序如何了解所有其他未直接导入的类呢?好吧,如果你注意到在我上面链接的索引文件中,有另一行指定了objj可以在哪里找到main()。在该文件的顶部,main.j导入Foundation和AppKit框架:请参阅此处。
我们可以跟踪这些导入,并看到CPWindow.j是在AppKit.j.的第109行导入的
因此,由于AppKit.j为您导入了大部分AppKit,您的依赖CPWindow的类(例如)不应该手动导入它……但这肯定不会有什么影响(文件永远不会导入两次)。
但是,由于AppKit和Foundation对您自己编写的类一无所知,因此您确实需要手动导入这些类。