对于混合代码,我想知道何时使用include以及何时使用import。
我检查了一些文件,导入比include更好,因为它可以消除使用include guard(pragma once)的需要。
我想知道我们是否可以在混合代码中完全使用import?
答案 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只使用一个类名。