OGeek|极客世界-中国程序员成长平台

标题: ios - 对于混合代码,何时使用包含,何时使用导入? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 10:46
标题: ios - 对于混合代码,何时使用包含,何时使用导入?

对于混合代码,我在想什么时候用include,什么时候用import。

我检查了一些文档,导入比包含更好,因为它可以消除使用包含保护(pragma once)的需要。

我想知道我们是否可以在混合代码中完全使用导入?



Best Answer-推荐答案


这个问题在 Stackoverflow 中有很长的答案:

进口

在 C 语言中,#include 预编译指令总是导致文件的内容在该点插入到源代码中。 Objective-C 具有等效的 #import 指令,只是每个文件在每个编译单元中只包含一次,从而无需包含保护。

#import 和#include

“#import”Objective-C/Objective-C++ 头文件和#include C/C++ 头文件。 根据您所包含的 header 语言在#import 和#include 之间进行选择。

包含使用 Objective-C 或 Objective-C++ 的 header 时,请使用 #import。 包含标准 C 或 C++ header 时,请使用#include。 header 应提供自己的#define 保护。 一些 Objective-C 头文件缺少#define 保护,并且期望只包含在#import 中。由于 Objective-C 头文件可能只包含在 Objective-C 源文件和其他 Objective-C 头文件中,因此全面使用 #import 是合适的。

没有任何 Objective-C 的标准 C 和 C++ header 可以预期包含在普​​通 C 和 C++ 文件中。由于标准 C 或 C++ 中没有#import,因此在这些情况下,#include 将包含此类文件。在 Objective-C 源文件中为它们使用#include 也意味着这些 header 将始终以相同的语义包含。

此规则有助于避免跨平台项目中的意外错误。引入新的 C 或 C++ 头文件的 Mac 开发人员可能会忘记添加 #define 保护,如果新头文件包含在 #import 中,这不会在 Mac 上造成问题,但会破坏使用 #include 的其他平台上的构建。通过在所有平台上使用 #include 保持一致意味着编译更有可能在任何地方成功或在任何地方失败,并避免文件仅在某些平台上工作的挫败感。

#import <Cocoa/Cocoa.h>
#include <CoreFoundation/CoreFoundation.h>
#import "GTMFoo.h"
#include "base/basictypes.h"

#import 指令作为#include 的改进版本添加到Objective-C。然而,它是否得到改进仍然是一个争论的问题。 #import 确保文件只包含一次,这样您就不会遇到递归包含的问题。但是,无论如何,大多数体面的头文件都会保护自己免受这种情况的影响,因此它并没有太大的好处。

基本上由您决定要使用哪个。我倾向于为 Object-C 的东西(如类定义等)#import header 和我需要的#include 标准 C 的东西。

看看这个链接,有更多的答案:

What is the difference between #import and #include in Objective-C?

Difference Between includes and imports [duplicate]

外部文档链接:Objective-C Style Guide

The difference between #import, #include and @class in Objective C

关于ios - 对于混合代码,何时使用包含,何时使用导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16291206/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4