对于混合代码,何时使用include,何时使用import?

时间:2013-04-30 02:19:02

标签: ios objective-c

对于混合代码,我想知道何时使用include以及何时使用import。

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

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

2 个答案:

答案 0 :(得分:1)

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

进口

在C语言中,#include pre-compile指令总是会导致文件的内容在该点插入到源代码中。 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是合适的。

普通的C和C ++文件可能包含标准C和C ++标头,其中没有任何Objective-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指令已添加到Objective-C,作为#include的改进版本。然而,它是否得到改善仍然是一个争论的问题。 #import确保文件只被包含一次,这样你就不会遇到递归包含问题。然而,大多数体面的头文件无论如何都能保护自己免受此类攻击,所以它并没有那么大的好处。

基本上由您决定要使用哪个。我倾向于#import标头用于Object-C事物(比如类定义等)和#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

答案 1 :(得分:0)

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

此外,如果您在.h文件中并且需要能够使用@property中的某个类的名称,则可以使用@class <myClassName>而不使用.h或.m只使用一个类名。