`

#import #include 区别

    博客分类:
  • ios
阅读更多
for example 三个文件

文件A.h

文件B.h

文件C.h

文件C.h需要引入A.h、B.h  ,文件B.h需要引入文件A.h,这样就重复引用了A.h两次,使用#import可以进行优化





一、 Objective-C 中 #import 和 #include 的区别  



预编译指令
Objective-C:#import
C,C++:#include
#import由gcc编译器支持

在 Objective-C 中,#import 被当成 #include 指令的改良版本来使用。除此之外,#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。

使用哪一个还是由你来决定。一般来说,在导入 Objective-C 头文件的时候使用 #import,包含 C 头文件时使用 #include。比如:

#import

#include
#include


#import比起#include的好处就是不会引起交叉编译

二、@class是用来做类引用的
@class就是告诉编译器有这么一个类,至于类的定义是啥不知道

@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import



举个例子说明:
在ClassA.h中
#import ClassB.h 相当于#include整个.h头文件。如果有很多.m文件#import ClassA.h,那么编译的时候这些文件也会#import ClassB.h增加了没必要的#import,浪费编译时间。在大型软件中,减少.h文件中的include是非常重要的。

如果
只是@class ClassB 那就没有include ClassB.h。仅需要在需要用到ClassB的ClassA.m文件中 #import ClassB.h

那么什么时候可以用@class呢?
如果ClassA.h中仅需要声明一个ClassB的指针,那么就可以在ClassA.h中声明
@ClassB
...
ClassB *pointer;
分享到:
评论

相关推荐

    #import用法详细分析

    * include():包括指定的头文件。 * inject_statement:将指定的语句注入到生成的代码中。 * named_guids:使用命名的GUID代替默认的GUID。 * no_auto_exclude:不自动排除类型库成员。 * no_dual_interfaces:不...

    简单谈谈c/c++中#import、#include和@class的区别

    在C/C++编程中,`#import`、`#include`和`@class`都是预处理器指令,用于处理源代码中的文件引用,但它们在不同的上下文和目的中具有特定的差异。 首先,`#import`是Objective-C中的指令,主要用于引入Objective-C...

    iOS开发中#import、#include和@class的区别解析

    在iOS开发中,我们经常会遇到#import、#include和@class这三个指令,它们在不同的场景下有着不同的作用和使用规范。理解它们的区别对于优化代码结构和提高编译效率至关重要。 首先,#import是Objective-C中的标准...

    iOS 面试题

    iOS 面试题: Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?...2.#import 跟#include 又什么区别,@class呢, #import<> 跟 #import”"又什么区别?

    import指令

    这些文件通过 `#include` 被包含在主要标头文件中。 这两个文件都会被保存在由 `/Fo` 选项指定的输出目录中,并且可以被编译器像普通头文件一样编译。 #### 八、优化与重构 - **缓存机制**:当编译器处理 `#...

    arcgis10在vc6.0的环境

    3. **添加头文件路径**:在“Additional include directories”文本框中,输入 ArcGIS SDK 中头文件所在的路径。例如,如果您的 SDK 安装在 D 盘的 ArcGIS 文件夹中,那么可以输入如下路径: - `D:\ArcGIS\Include\...

    vc xml 读取

    #include <msxml.h> #import //读取XML文档 MSXML2::IXMLDOMDocumentPtr pDoc; //创建文档对象 MSXML2::IXMLDOMNodePtr pNode;

    object c 编程

    - **#import与#include**:`#import`用于导入头文件,与`#include`类似但提供了更好的性能和代码优化。`#import`会自动处理头文件重复导入的问题,而`#include`通常需要配合预处理器指令如`#ifndef`、`#define`、`#...

    c++如何采用com组件的方法直接调用动态库

    #include "D:\Temp\vc\simpCOM\simpCOM.h" ``` 然后,我们可以使用 CoCreateInstance 函数来创建 COM 组件的实例。 ```cpp CoInitialize(NULL); IFoo* pFoo = NULL; HRESULT hr = CoCreateInstance(CLSID_Foo, NULL,...

    关于预处理指令#include的用法总结

    例如,Java使用import语句导入类或包,Python使用import语句导入模块或包等。 掌握预处理指令#include的用法对于一个程序员来说是基础且重要的一部分,因为它关系到代码的组织和管理。在实际开发中,合理运用#...

    mssoap30.dll

    #include "stdafx.h" #import "msxml4.dll" using namespace MSXML2; #import "C:/Program Files/Common Files/MSSoap/Binaries/mssoap30.dll" \ exclude("IStream", "IErrorInfo", "ISequentialStream", \ ...

    ios面试

    #### 六、#import与#include的区别 **#import与#include的主要区别** - **重复包含保护**:`#import`会自动忽略重复包含同一文件的情况,而`#include`则不会,可能导致编译错误或资源浪费。 - **头文件导入顺序**:`...

    iOS编码规范

    在Objective-C中优先使用`#import`而非`#include`,因为`#import`有防止重复导入的特性。尽量使用 angle brackets (`< >`) 包裹系统框架的引用,而使用双引号 (`" "`) 包裹自定义类的引用。 #### 4.2 使用框架根 ...

    MFC学习之SQL数据库操作类

    #import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF") #pragma warning(default:4146) using namespace ADODB; class CAdoLx { _...

    Tips for using MapObjects with VC++

    此外,可能还需要在Tools - Options下添加Mo2.ocx目录到include路径中。 3. **添加变量声明**:在View类的私有部分添加以下变量声明: ``` MapObjects2::IMoMapPtr m_moMap; ``` 4. **编译和测试**:保存所有...

    java棒打猪头游戏源码-20170627:一些知识点学习

    java棒打猪头游戏源码 Object-c的类可以多重继承么 ...答:#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#

    importer:已弃用

    进口商Importer 向基于 JavaScript 的语言添加了#import语句,包括 CoffeeScript,其工作方式类似于基于 C 的语言中的#include 。 它将文件编译为 JavaScript,在您定义的位置将它们连接在一起,生成,并仅管理已...

Global site tag (gtag.js) - Google Analytics