iOS7新增关键字@import
。这在开发中用的比较少。但是最近在开发中碰到了这种用法,便进一步了解了一下。
1.使用@import
的最大好处之一是当需要使用某个苹果自己的框架时,再也不需要在项目的setting中做 “点击’+’号按钮搜索依赖框架添加” 这样的操作了,@import
内部会自动实现这个过程。这样我们就可以使用代码完成以前需要在图形界面完成的动作。苹果又为开发者做出了改进。
2.目前使用@import
仅适用于苹果自己的框架,当在项目中想使用@import
导入自己搭建的框架或者第三方框架时,是无效的。
3.使用@import
,旧项目使用时会报错,只需要在Build Setting中搜索Modules设置Enable Modules
为YES。新项目则默认为YES无需设置。
4.上述所说@import
还涉及到一个iOS7新特性Modules和Autolinking。在iOS7以前,我们使用系统框架需要导入该框架,并且在要用到的类中#import <FrameworkFoo/HeaderBar.h>
头文件的引用不管是#include
还是#import
都是将目标.h文件复制粘贴到当前文件。#import
相比于#include
有避免重复引用的功能(比如B和C都引用了A,D又同时引用了B和C,这样A中定义的东西就在D中被定义了两次,重复了)#import
,保证每个头文件只会被引用一次。Modules相当于将框架进行了封装,然后加入在实际编译之时加入了一个用来存放已编译添加过的Modules列表。如果在编译的文件中引用到某个Modules的话,将首先在这个列表内查找,找到的话说明已经被加载过则直接使用已有的,如果没有找到,则把引用的头文件编译后加入到这个表中。这样被引用到的Modules只会被编译一次,但是在开发时又不会被意外使用到,从而同时解决了编译时间和引用泛滥两方面的问题。拿UIKit
为例:
|
|
最后:说到这里顺便提一下@class
:@class
是告诉编译器存在这个类,当实际使用时还是要@import
进来,这样可以有效防止循环引用引发的编译错误。