【问题标题】:Why is Foundation.h not imported in the standard Xcode templates?为什么 Foundation.h 没有在标准 Xcode 模板中导入?
【发布时间】:2011-08-30 07:42:10
【问题描述】:

我刚刚注意到,当我使用 Xcode 中的标准模板(基于视图的应用程序、基于窗口的应用程序等)创建 iPhone 应用程序时,头文件只导入 UIKit.h(而不是 Foundation.h)。因此,如果 Foundation.h 文件没有被导入,如何在程序中使用 NSString、NSArray 等 Foundation 类?它不应该抛出错误吗?

【问题讨论】:

    标签: iphone objective-c xcode ios


    【解决方案1】:

    它被导入到你项目的预编译头文件(扩展名.pch)中。

    #ifdef __OBJC__
        #import <Foundation/Foundation.h>
        #import <UIKit/UIKit.h>
    #endif
    

    至于为什么UIKit.h 似乎每个文件有两个导入行,因为它也显示在上面,不过,我不太确定。无论如何这都不重要,因为如果第二行 #import 已经包含在预编译的头文件中,它不会导致 UIKit 再次被包含。

    【讨论】:

    • 那么 UIKit/UIKit.h 也被导入到预编译的头文件中。为什么又在我们的头文件中导入了?
    【解决方案2】:

    如果您查看一些单独的 UIKit 标头,它们会自己导入 Foundation。正如 BoltClock 所指出的,它也在标准 .pch 中

    "The Objective-C Programming Language"中提到了可以放在所有这些地方的原因:

    该指令与#include 相同,只是它确保同一个文件不会被多次包含。因此,它是首选,并在整个基于 Objective-C 的文档的代码示例中用于代替 #include。

    您要确保需要访问 Foundation 中定义的符号的每个文件都有它们。重复它的原因是它有助于阅读和理解代码;它说“此代码依赖于此标头中的内容”。

    【讨论】:

      【解决方案3】:

      看起来模板文件被设计为使用或不使用预编译头文件,因此它们导入了他们使用的头文件。如果您创建NSObject 的子类,模板文件 导入Foundation。如果您创建 UIKit 对象的子类,则将导入 UIKit 标头。

      好的,那么当只导入UIKit 时,为什么你可以使用NSString 之类的Foundation 类。好吧,几乎所有的UIKit 标头都导入了Foundation.h

      希望这是有道理的。

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 2011-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-13
        • 1970-01-01
        相关资源
        最近更新 更多