#import和#include区别
来源:互联网 发布:mysql分类后显示合计 编辑:程序博客网 时间:2024/06/05 04:18
#include做的事情其实就是简单的复制粘贴,将目标.h文件中的内容一字不落地拷贝到当前文件中,并替换掉这句include,而#import实质上做的事情和#include是一样的,只不过OC为了避免重复引用可能带来的编译错误(这种情况在引用关系复杂的时候很可能发生,比如B和C都引用了A,D又同时引用了B和C,这样A中定义的东西就在D中被定义了两次,重复了),而加入了#import,从而保证每个头文件只会被引用一次。
如果想深究,import的实现是通过#ifndef一个标志进行判断,然后在引入后#define这个标志,来避免重复引用的。
实质上import也还是拷贝粘贴,这样就带来一个问题:当引用关系很复杂,或者一个头文件被非常多的实现文件引用时,编译时引用所占的代码量就会大幅上升(因为被引用的头文件在各个地方都被copy了一遍)。为了解决这个问题,C系语言引入了预编译头文件(PreCompiled Header),将公用的头文件放入预编译头文件中预先进行编译,然后在真正编译工程时再将预先编译好的产物加入到所有待编译的Source中去,来加快编译速度。比如iOS开发中Supporting Files组内的.pch文件就是一个预编译头文件,默认情况下,它引用了UIKit和Foundation两个头文件–这是在iOS开发中基本每个实现文件都会用到的东西。
于是理论上说,想要提高编译速度,可以把所有头文件引用都放到pch中。但是这样面临的问题是在工程中随处可用本来不应该能访问的东西,而编译器也无法准确给出错误或者警告,无形中增加了出错的可能性。
于是Modules诞生了。当然,如果对于以前的工程,想要使用新的Modules特性,如果要把所有头文件都这样一个一个改成@import的话,会是很大的一个工作量。Apple自然也考虑到了这一点,于是对于原来的代码,只要使用的是iOS7或者MacOS10.9的SDK,在Build Settings中将Enable Modules(C and Objective-C)打开,然后保持原来的#import写法就行了。是的,不需要任何代码上的改变,编译器会在编译的时候自动地把可能的地方换成Modules的写法去编译的。
- #include和 #import区别
- #import和#include区别
- include和import的区别
- #import 和 #include 的区别
- #import和#include的区别
- #import 和 #include 的区别 #import <> 和 #import ""的区别
- 总结:#import和#include区别 #import和@class的区别 #import<>和#import""的区别
- #import和#include区别 #import和@class的区别 #import<>和#import""的区别
- #include和#import "" <>和@class区别讲解
- #include和#import "" <>和@class区别
- #import、#include和@class的区别
- #import、#include和@class的区别
- #import、#include和@class的区别
- #include和#import区别以及@class作用
- [Objective-C] #include和#import的区别
- OC-import和include的区别?
- #import、#include和@class有什么区别
- #import、#include和@class有什么区别?
- Android中如何通过程序打开或关闭GPS
- VB与数据库(2)
- NDK介绍
- 打印txt文件信息
- 7天后的时间 mysql , php
- #import和#include区别
- 软件测试工程师成长之路:掌握软件测试九大技术主题
- 局部特征提取
- 修正jquery的autocomplete在firefox下不支持中文输入法提交的bug
- iOS UITableViewCell AccessoryType属性
- 写一个能输出自己的c程序
- VS2008修改工程名
- 数据结构 - 二叉堆
- 【Halcon】halcon10.0中的实例