2

对于混合代码,我想知道何时使用包含以及何时使用导入。

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

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

4

2 回答 2

1

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

进口

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

#import 和 #include

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

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

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

此规则有助于避免跨平台项目中的意外错误。引入新的 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 的东西(如类定义等)和 #include 我需要的标准 C 东西 #import 标头。

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

Objective-C 中的#import 和#include 有什么区别?

包含和导入之间的区别[重复]

外部文档链接:Objective-C 风格指南

Objective C 中#import、#include 和@class 的区别

于 2013-04-30T03:53:10.473 回答
0

如果您指的是标准 C 代码,那么您应该始终能够使用#import.

此外,如果您在一个 .h 文件中并且只需要能够在例如 an 中使用类的名称@property,则可以@class <myClassName>在没有 .h 或 .m 的情况下使用仅使用类名。

于 2013-04-30T03:33:53.283 回答