当我使用终端命令 capp gen MyProject 创建新的Cappuccino项目时,我获得了使用许多Foundation和AppKit类的AppController.j,但只有一个import语句
@import <Foundation/CPObject.j>
卡布奇诺进口系统如何运作?应用程序如何了解CPNotification,CPWindow,CPTextField以及AppController.j中使用的其他类。
谢谢!
答案 0 :(得分:1)
大多数导入都是多余的,但拥有它们是好事,因为它有助于我们的静态分析工具帮助在构建生产时删除代码。
index.html和index-debug.html页面上定义了两个“环境”变量。 请参阅here。
OBJJ_INCLUDE_PATHS基本上是导入框架/库代码时objj要查看的位置列表。例如,你这样做:
@import <Foundation/CPObject.j>
而不是:
@import "Foundation/CPObject.j>
那是因为 Foundation / CPObject.j 存在于框架中。因此,执行@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的类(例如)不应该手动导入它......但它肯定不会受到伤害(文件永远不会被导入两次)。 / p>
但是,由于AppKit和Foundation对您编写的自己的类一无所知,因此您需要手动导入它们。