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;

时间: 2024-10-28 21:42:54

Objective-C 中 #import 和 #include 的区别的相关文章

objective c:import和include的区别, ""和<>区别

#include 指令只是告诉编译器把所要引用的头文件复制粘贴过来 #import 会检查是否已经导入过了,更有效率,更快. 比如a文件引用过头文件x.h,b文件也需要x.h,但b文件引用了a,则b中就不需要再重新引用x.h了. <>和""在头文件的区别 一般系统自带的用<> 而用户自己定义的用""

#import和#include的区别 关键字@class的作用

一.#import和#include的区别当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了 二.关键字@class的作用在来看一下OC中的关键字@class的作用,在看他的作用之前,先来看一个问题:现在有一个课程类Classes和学生类Student,他们两之间需要相互引用(导入).直接看代码比较直接:Cla

objective-c中#import和@class的区别

在Objective-C中,可以使用#import和@class来引用别的类型, 但是你知道两者有什么区别吗? @class叫做forward-class,  你经常会在头文件的定义中看到通过@class的引用, 原因就是当你只用@class来引入一个类时, 编译器知道有这么一个类,也就是说它能识别Engine *engine; 而在implementation文件中,如果你想要访问engine.price, 编译器就会出错, 即使你用了@class引入了. 这时需要使用的其实是#import

js中import和require的区别

js中import和require的区别ES6标准发布后,module成为标准,标准使用是以export指令导出接口,以import引入模块.但是在我们一贯的node模块中,我们依然采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口. require它相当于module.exports的传送门,module.exports后面的内容是什么,require的结果就是什么,对象.数字.字符串.函数……再把require的结果赋值给某个变量,相当于把re

iOS 中 #import 和 @class 的区别

1.#import 会包含这个类的所有信息,包括实体变量和方法,而 @class 只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你. 2.在头文件(.h 文件)中, 一般只需要知道被引用的类的名称就可以了. 不需要知道其内部的实体变量和方法,所以在头文件中一般使用 @class 来声明这个名称是类的名称. 而在实现类(.m 文件)里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用 #import 来包含这个被引用类的头文件. 3.在编译

python中import和from-import的区别

. import导入模块的路径两种方式 # 将模块所在路径再程序中添加到sys.path列表中 import sys sys.path import导入模块按照sys.path顺序依次查找,""代表当前路径 # 修改操作系统的PYTHON_PATH环境变量 # 系统的环境变量 export PYTHON_PATH=$PYTHON_PATH:新的路径 . import 模块名 和 from 模块名 import * 是不同的; 1. 调用模块属性的区别 import 模块名 模块名.xx

JSP中两种include的区别

首先说明这两种都是什么: <%@ include file=”relativeURI”%> 可以叫作静态include(静态包含),是jsp指令中的一种,(JSP指令控制JSP编译器如何去生成servlet(servlet是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类别,一般情况下,人们将Servlet理解为后者.-维基百科) <js

PHP中require和include的区别

include()与require()的功能相同 include(include_once) 与 require(require_once)都是把把包含的文件代码读入到指定位置来,但是二者再用法上有区别:(include()是有条件包含函数,而require()则是无条件包含函数) 1, 使用方式不同 (1) require 的使用方法如 require("requireFile.php"); .这个函式通常放在 PHP 程式的最前面,PHP 程式在执行前,就会先读入 require

JSP 中两种 include 的区别

转自:http://www.cnblogs.com/lazycoding/archive/2011/04/04/two_include.html <%@include file="relativeURI"%> 可以叫作静态include(静态包含),是jsp指令中的一种. <jsp:include page=”relativeURI” flush=”true” />叫作动态include(动态包含),是jsp动作的一种. 引入内容的不同 <%@includ