`

#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;
分享到:
评论

相关推荐

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

    1. 一般来说,导入objective c的头文件时用#import,包含c/c++头文件时用#include。 2. #import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。<标记> 所以,#import比起#include的好处就是不会...

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

    1. 一般来说,导入objective c的头文件时用#import,包含c/c++头文件时用#include。 2. #import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。<标记> 所以,#import比起#include的好处就是...

    iOS 面试题

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

    object c 编程

    n #import vs #include:就如同你在 hello world 范例中看到的,我们使用了 #import。#import 由 gcc 编译器支持。我并不建议使用 #include,#import 基本 上跟 .h 档头尾的 #ifndef #define #endif 相同。许多...

    vc xml 读取

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

    Google Objective-C Style Guide 中文版

    #import与#include 使用根框架 创建对象时尽量使用autorelease Autorelease之后retain Dealloc中应该按声明的顺序处理成员变量 Setters中对NSString进行copy 避免抛出异常 nil的检查 BOOL陷阱 属性 Cocoa模式 委托...

    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 { _...

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

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

    importer:已弃用

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

    java棒打猪头游戏源码-iOS-Interview:iOS-面试

    2、"#import跟#include有什么区别,@class呢,#import<> 跟 #import”又有什么区别?" import是Objective-C导入头文件的关键字,#include是c/c++导入头文件的关键字,使用#import头文件会自动导入一次,不会重复...

    PPWIZARD v08.071

    使用简单但是功能强大的HTML预处理工具。包含#define,#include,#if,#evaluate, #AutoTag,#import等命令,并能插入SQL语句。能把TXT转换为HTML。

    arcgis10在vc6.0的环境

    一.在IDE新建工程 二.配置库路径 ...选择“C/C++”页,在“Category”下拉列表中选择“Preprocessor”...在“Additional include directories”中,添加头文件和库的路径,比如: D:\ArcGIS\Include\CPPAPI,D:\ArcGIS\com

    JSP的include指令的使用方法

    JSP的include指令的使用方法 一 语法 <%@ include file=URL%> 二 代码 1、date.jsp <%@ page language=java import=java.util.* contentType=text/html; charset=utf-8%> <%@ page import...

    import指令

    import 创建两个标题文件来重新构造C++源代码内的类型库内容。主要标头文件类似于生产有Microsoft“接口定义语言”(MIDL)编译器生成的文件,但是是使用附加的编译器生成的代码。“主要标头文件”具有与类库相同的基...

    IOS面试题归总

    static作用 #import和#include的区别,@class代表什么 线程和进程的区别? 堆和栈的区别? Object-C的内存管理? 为什么很多内置的类,如TableViewController的delegate的属性是assign不是retain?

    AXiOSKit:个人开发工具类

    #if __has_include() #import #else #import "YYWebImage.h" #endif GitHub汇总 消除过期警告top /// 消除局部警告 #pragma clang diagnostic push #pragma clang diagnostic ignored <#参数#> /* 代码放这中间...

    flutter_downloader:Flutter Downloader-一个用于创建和管理下载任务的插件。 支持iOS和Android。 维护者

    配置AppDelegate : 目标C: // / AppDelegate.h# import < Flutter># import < UIKit>@interface AppDelegate : FlutterAppDelegate@end // AppDelegate.m# include " AppDelegate.h "# include " ...

Global site tag (gtag.js) - Google Analytics