#import和#include在Objective-C中的区别是什么?在某些情况下你应该使用其中一个而不是另一个?一个被弃用了吗?
我正在阅读以下教程:http://www.otierney.net/objective-c.html#preamble,其中关于#import和#include的段落似乎自相矛盾,至少不清楚。
#import和#include在Objective-C中的区别是什么?在某些情况下你应该使用其中一个而不是另一个?一个被弃用了吗?
我正在阅读以下教程:http://www.otierney.net/objective-c.html#preamble,其中关于#import和#include的段落似乎自相矛盾,至少不清楚。
当前回答
如果你在.h文件中两次包含一个文件,编译器将会给出错误。 但是如果你多次导入一个文件,编译器就会忽略它。
其他回答
#include就像c#中的include一样。
#import跟踪哪些头文件已经被包含,如果一个头文件在编译单元中被导入多次,则该头文件将被忽略。这使得没有必要使用头保护。
底线是在Objective-C中使用#import,不要担心你的头文件会导入一些东西不止一次。
如果您熟悉c++和宏,那么
#import "Class.h"
类似于
{
#pragma once
#include "class.h"
}
这意味着当你的应用程序运行时,你的类只会被加载一次。
#import指令作为#include的改进版本被添加到Objective-C中。然而,它是否有所改善仍是一个争论的问题。#import确保一个文件只被包含一次,这样就不会出现递归包含的问题。然而,大多数体面的头文件都会保护自己不受这种情况的影响,所以这并没有什么好处。
基本上,由您决定使用哪一种。我倾向于#import Objective-C内容(如类定义等)的头文件,#包含我需要的标准C内容。例如,我的一个源文件可能是这样的:
#import <Foundation/Foundation.h>
#include <asl.h>
#include <mach/mach.h>
如果你在.h文件中两次包含一个文件,编译器将会给出错误。 但是如果你多次导入一个文件,编译器就会忽略它。
在可能的情况下,我在我的.h文件中有一个全局变量,导致了这个问题,我通过在它前面添加extern来解决它。